简短问题:
你有一个Rx代码示例可以帮助人们更好地理解它吗?
长时间散布着隐藏的问题:
现在已经发布了 Rx框架,我认为我们中的许多人都有兴趣获取这些内容并尝试它们。可悲的是,实际上并没有很多例子(经过详尽的搜索后,我几乎确信Rx只是为了在wpf应用上轻松实现)。
我不记得我读到或听过的确切位置(我一直在看很多博客和视频)Rx团队似乎对101系列感兴趣...当他们有足够的时间要做到这一点......对于那些想要了解它并且现在玩它的人来说非常糟糕(我的意思是,当一个新技术时,自我尊重的开发人员不会觉得自己像个新玩具的孩子。像这样出现了。)
我个人现在正在试一试,但哇有一些疯狂的概念......只是为了让方法名称如 物化 和 Zip 让我想起 Teleporters 以及回到未来的内容。
所以,我认为如果那些有更多理解的人,帮助建立一个例子的集合,从基本用法到更复杂的东西,那么 101 Linq例子会很好以实用的方式涵盖所有方法及其用法(也许还有一点理论,特别是因为这些概念可能需要它)
我认为MS开发人员花时间给我们这样的材料很棒,但我也认为这个社区已经足够开始构建我们自己的材料了,不是吗?
答案 0 :(得分:27)
几天前我实际上有类似的想法。我们在Rx MSDN论坛上发布了我们自己的“101 Rx Samples”,但我们已将其转换为Wiki格式。请随时过来添加您自己的样品!
答案 1 :(得分:12)
首先 - 这是一个简单的绘图应用程序,因此当用户拖动时,我们从初始鼠标向下位置到当前位置绘制一条红线,并在当前位置绘制一个蓝点。这是我上周对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
希望这有帮助
答案 2 :(得分:7)
另一个有用的资源可能是Reactive Extensions (Rx) Koans: 55个渐进式示例,可帮助您学习Rx
答案 3 :(得分:5)
我正在阅读http://www.introtorx.com,其名称似乎是一个简明的介绍。似乎有很多(非常基本的)示例,一步一步,主要是使用控制台打印出来的东西。
答案 4 :(得分:4)
这是我对drag & drop sample by 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));
}
答案 5 :(得分:3)
有点晚了,但如果有人遇到这个问题,http://rxmarbles.com/提供了一种非常好的方法来可视化运营商。
答案 6 :(得分:1)
Github上的 Stock Viewer 示例
所有StreamProviders,StreamAggregate和Views都在自己的线程中运行。这也是现实世界库存查看应用程序的典型线程模型。
此示例也可以是WPF DataGrid的简单性能测试框架。它计算滴答/秒处理并在视图上显示。