编辑:感谢wiki的链接,我认为自从它已经开始,它更容易去那里检查。不过这里的问题也很好,所以不在msdn论坛周围的人会了解wiki及其位置。
简短问题:
你有一个Rx代码示例,可以帮助人们更好地理解它吗?
漫长的漫无边际的问题:
现在已经发布了Rx框架,我认为我们中的许多人都有兴趣获取这些内容并尝试它们。可悲的是,实际上并没有很多例子(经过详尽的搜索后,我几乎确信Rx只是为了在wpf应用上轻松实现)。
我不记得我读到或听过的确切位置(我一直在看很多博客和视频),Rx团队似乎对101系列感兴趣...当他们有足够的时间去做...对于那些想要了解它并且现在玩它的人来说非常糟糕(我的意思是,当一个像这样的新技术出现时,自我尊重的开发人员不会觉得自己是一个带有新玩具的孩子) 。
我个人现在一直在尝试,但哇有一些疯狂的概念......只是让像Materialise和Zip这样的方法让我想起了Teleporters和Back to the Future的东西。
所以,我认为如果那些有更多理解的人,帮助建立一个例子的集合,从基本用法到更复杂的东西,并且几乎涵盖了所有方法及其用途的101 Linq示例,那将是很好的。一种实用的方法(也许还有一点理论,特别是因为这些概念可能需要它)
我认为MS开发人员花时间给我们这样的材料很棒,但我也认为这个社区足以开始构建我们自己的材料,不是吗?
几天前我实际上有类似的想法。我们在Rx MSDN论坛上发布了我们自己的“101 Rx Samples”,但我们已将其转换为Wiki格式。请随时过来添加您自己的样品!
首先 - 这是一个简单的绘图应用程序,因此当用户拖动时,我们从初始鼠标向下位置到当前位置绘制一条红线,并在当前位置绘制一个蓝点。这是我上周对Rx进行攻击的结果
这是源代码。
//A draw on drag method to perform the draw
void DrawOnDrag(Canvas e)
{
//Get the initial position and dragged points using LINQ to Events
var mouseDragPoints = from md in e.GetMouseDown()
let startpos=md.EventArgs.GetPosition(e)
from mm in e.GetMouseMove().Until(e.GetMouseUp())
select new
{
StartPos = startpos,
CurrentPos = mm.EventArgs.GetPosition(e),
};
//Subscribe and draw a line from start position to current position
mouseDragPoints.Subscribe
(item =>
{
e.Children.Add(new Line()
{
Stroke = Brushes.Red,
X1 = item.StartPos.X,
X2 = item.CurrentPos.X,
Y1 = item.StartPos.Y,
Y2 = item.CurrentPos.Y
});
var ellipse = new Ellipse()
{
Stroke = Brushes.Blue,
StrokeThickness = 10,
Fill = Brushes.Blue
};
Canvas.SetLeft(ellipse, item.CurrentPos.X);
Canvas.SetTop(ellipse, item.CurrentPos.Y);
e.Children.Add(ellipse);
}
);
}
Read my post with further explanation here和Download the source code here
希望这可以帮助
另一个有用的资源可能是Reactive Extensions (Rx) Koans:55个渐进式示例,可以帮助您学习Rx
我正在读http://www.introtorx.com,顾名思义似乎是一个简洁的介绍。似乎有很多(非常基本的)示例,一步一步,主要是使用控制台打印出来的东西。
这是我对drag & drop sample by Wes Dyer的变体,对于Windows Forms(我可能会使EnableDragging成为一种扩展方法):
public Form2()
{
InitializeComponent();
EnableDragging(pictureBox1);
EnableDragging(button1);
EnableDragging(this);
}
private void EnableDragging(Control c)
{
// Long way, but strongly typed.
var downs = from down in Observable.FromEvent<MouseEventHandler, MouseEventArgs>(
eh => new MouseEventHandler(eh),
eh => c.MouseDown += eh,
eh => c.MouseDown -= eh)
select new { down.EventArgs.X, down.EventArgs.Y };
// Short way.
var moves = from move in Observable.FromEvent<MouseEventArgs>(c, "MouseMove")
select new { move.EventArgs.X, move.EventArgs.Y };
var ups = Observable.FromEvent<MouseEventArgs>(c, "MouseUp");
var drags = from down in downs
from move in moves.TakeUntil(ups)
select new Point { X = move.X - down.X, Y = move.Y - down.Y };
drags.Subscribe(drag => c.SetBounds(c.Location.X + drag.X, c.Location.Y + drag.Y, 0, 0, BoundsSpecified.Location));
}
有点晚了,但是如果有人在这个问题上遇到新的问题,http://rxmarbles.com/提供了一种非常好的方法来可视化运营商。
还有一个关于Github Stock Viewer的例子
所有StreamProviders,StreamAggregate和Views都在自己的线程中运行。这也是现实世界库存查看应用程序的典型线程模型。
此示例也可以是WPF DataGrid的简单性能测试框架。它计算滴答/秒处理并在视图上显示。