101 Rx示例

编辑:感谢链接到维基,我认为,因为它已经开始在那里,更容易去那里检查出来。 然而,这里的问题也很好,所以不在MSDN论坛的人们会了解到这个wiki以及它在哪里。

简短的问题:

你有Rx代码示例可以帮助人们更好地理解它吗?

漫无边际的问题:

现在Rx框架已经发布了,我认为我们中的很多人都有兴趣获得和尝试。 可悲的是,真的没有太多的例子(经过详尽的search,我几乎相信Rx只是为了方便地拖动WPF应用程序)。

我不记得我读过或听过的是什么(我一直在看许多博客和video)Rx团队似乎对101系列感兴趣……当他们有足够的时间去做…对于那些想要了解它并现在玩的人来说,这真的很糟糕(我的意思是,当一个新技术出现时,什么自我推崇的开发者不会觉得自己像一个玩具的孩子) 。

我个人现在正在尝试,但哇哇哇哇哇中有一些疯狂的概念…只是有像MaterializeZip方法名称让我想起传送者和东西从回到未来

所以,我认为如果那些理解力更强的人帮助build立一些例子,从基本的用法到更复杂的东西,几乎涵盖所有的方法和它们的使用,一个实用的方法(也许也有一些理论,特别是因为这些概念可能需要它)

我认为,MS开发人员花时间给我们提供这样的资料非常棒,但是我也认为这个社区已经足够好了,开始构build我们自己的材料,不是吗?

我前几天也有类似的想法。 我们在Rx MSDN论坛上发布了自己的“101 Rx Samples”,但是之后我们把它移到了Wiki格式。 请随时过来,添加自己的样品!

Rx维基上的101个Rx示例

开始 – 这是一个简单的绘图应用程序,以便当用户拖动时,我们从最初的鼠标向下位置到当前位置画一条红线,在当前位置也是一个蓝点。 这是我上周在Rx上的黑客攻击的结果

一个WPF绘图演示

这里是源代码。

//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); } ); } 

在这里阅读我的post进一步解释,并在 这里 下载源代码

希望这可以帮助

另一个有用的资源可能是Reactive Extensions(Rx)Koans : 55个渐进的例子来帮助你学习Rx

我正在阅读http://www.introtorx.com ,它的名称似乎是一个简洁的介绍。 似乎有相当多的(非常基本的)例子,一步一步的,主要是使用控制台打印出来的东西。

这里是我对Wes Dyer的拖放样本的变体,对于Windows窗体(我会使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示例 在这里输入图像说明

  1. SteamProvider抽取一个服务器并生成一个Rx.NET IObservablestream。
  2. SteamAggregator聚合所有IObservablestream并将结果复制到中央处理线程中。
  3. 视图过滤单个stream并将结果复制到它们自己的线程中进行显示。

所有StreamProviders,StreamAggregate和Views都在自己的线程中运行。 这也是真实世界股票查看应用程序的典型线程模型。

这个例子也可以是WPF DataGrid的一个简单的性能testing框架。 它计算每秒钟处理的蜱数并将其显示在视图上。