-
21-09-2019 - |
質問
編集:Wiki へのリンクをありがとうございます。Wiki では既に開始されているので、そこにアクセスして確認するのが簡単だと思います。ただし、ここでの質問も優れているため、msdn フォーラムにアクセスしていない人でも、Wiki とその場所について知ることができます。
短い質問:
人々の理解を深めるのに役立つ Rx コードのサンプルはありますか?
隠された質問を含む長いとりとめのない話:
さて、 Rxフレームワーク がリリースされましたので、実際に手に入れて試してみたいと思っている方も多いと思います。悲しいことに、実際にはあまり多くの例はありません(徹底的に検索した結果、Rx は wpf アプリで簡単なドラッグを実行するためだけに意図されているとほぼ確信しました)。
Rx チームが 101 シリーズの開発に興味を持っているようだということをどこで読んだり聞いたりしたのか正確には思い出せません (多くのブログやビデオを見てきました)...十分な時間ができたら...これは、それを理解して今すぐ遊びたい人にとってはかなりひどいことです(つまり、自尊心のある開発者は、新しいテクノロジーが登場したときに、新しいおもちゃを持つ子供のような気分ではありません。このようなものが出てきます)。
私も個人的に試してみているのですが、すごい、クレイジーなコンセプトが含まれています...メソッド名を次のようにするだけです 実体化する そして ジップ 考えさせられる テレポーター そしてからのもの バック・トゥ・ザ・フューチャー.
ですので、より理解のある人が事例集の作成に協力してくれると良いと思います。 101 Linq の例 基本的な使用法からより複雑なものまで、ほぼすべてのメソッドとその使用法を実践的な方法でカバーしています (特に、この種の概念で必要とされるため、おそらく少しの理論も含まれます)。
MS 開発者が時間をかけてこのようなマテリアルを提供してくれるのは素晴らしいことだと思いますが、このコミュニティは独自のマテリアルを構築し始めるのに十分だとも思いませんか?
解決
私は実際には数日前、同様の考えを持っていました。私たちは、RxのMSDNフォーラムでのポストとして私たち自身の「101 Rxのサンプル」を開始したが、我々は以来のWiki形式に移動しました。以上来て、あなた自身のサンプルを追加すること自由に感じなさい!
Rxのウィキのに他のヒント
で起動するには - ここでは、ユーザーがドラッグしたときので、私たちは現在の場所に現在の場所に位置ダウン初期のマウスから赤い線、そしてまた、青色のスポットを描くことを、簡単な描画アプリケーションです。これは、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);
}
);
}
さらにして、私の記事を読みますここでの説明とここでは、ソースコードをダウンロードする
ホープ、このことができます。
は別の有用なリソースは、反応性拡張機能(Rx)のKoans のかもしれあなたが受信を学ぶ
の私が読んでいる 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));
}
Aは少し遅れますが、この質問の際に誰かが新しいつまずく場合は、 http://rxmarbles.com/ を提供します演算子を視覚化するための非常に良い方法ます。
そして、 ストックビューア Github の例
- StreamProvider はサーバーからデータを取得し、Rx.NET IObservable ストリームを生成します。
- StreamAggregator は、すべての IObservable ストリームを集約し、その結果を中央処理スレッドに複製します。
- ビューは単一のストリームをフィルタリングし、結果を表示用に独自のスレッドに複製します。
すべての StreamProvider、StreamAggregate、および View は独自のスレッドで実行されます。これは、現実世界の株式表示アプリケーションの典型的なスレッド モデルでもあります。
この例は、WPF DataGrid の単純なパフォーマンス テスト スケルトンにすることもできます。処理された秒あたりのティック数を計算し、ビューに表示します。