按照Jim Wooley的建议。
我认为你正在寻找的代码是
var q = from start in mouseDown
from delta in mouseMove.StartWith(start).Until(mouseUp)
.Let(mm=> mm.Zip(mm.Skip(1), (prev, curr) =>
new { X = curr.X - prev.X, Y = curr.Y - prev.Y}))
select delta;
记住,写于2009年和Rx从那时起沿着一些移动。我认为这是你想要的。我认为Let是一个你想避免的功能(即使对你有用),因为它可能会导致副作用。改为使用转换。在下面的情况下,let是不需要的。
//Gets the delta of positions.
var mouseMovements = mouseMove.Zip(mouseMove.Skip(1), (prev, curr) =>
new { X = curr.X - prev.X, Y = curr.Y - prev.Y}));
//Only streams when mouse is down
var dragging = from md in mouseDown
from mm in mouseMovement.TakeUntil(mouseUp)
select mm;
嗨,没有这不工作,我已经添加使用声明,也许它在某些程序集,我没有引用?我参考了以下... System.Reactive,System.Reactive.Providers,System.Reactive.Windows.Threading – electricsheep
它在System.Reactive程序集。您使用的是哪个版本的RX,以及在什么平台上? – chrisaut
这是一个WPF应用程序及其从NuGet获得的版本 – electricsheep