web-dev-qa-db-ja.com

101 Rxの例

編集:ウィキへのリンクをありがとう、私はそれがすでにそこから始まったので、チェックするためにそこに行く方が簡単だと思います。ただし、ここでの質問も良いので、msdnフォーラムに参加していない人もwikiとその場所を知ることができます。

短い質問:

人々がそれをよりよく理解するのに役立つRxコードのサンプルはありますか?

隠された質問で長いとりとめ:

Rxフレームワークがリリースされたので、多くの人がビットを取得して試してみたいと思っています。悲しいことに、実際にはそれほど多くの例はありません(徹底的な検索の結果、Rxはwpfアプリで簡単にドラッグすることだけを目的としていると確信しています)。

Rxチームが101シリーズの実行に関心を持っているようである(私が多くのブログやビデオを見てきた)どこで読んだり聞いたりしたのか正確に思い出せない...それを理解して今すぐプレイしたい人にはかなり嫌です(つまり、このような新しい技術が登場したときに、自尊心のある開発者が新しいおもちゃを持っている子供のように感じないのは何ですか) 。

私は個人的に今試してみましたが、すごいコンセプトがいくつかあります... MaterializeおよびZipは、テレポーターおよびBack to the Futureからのもの.

ですから、より理解のある人が例のコレクションを構築するのを助けてくれたらいいと思います101 Linq Examples基本的な使用法からより複雑なものに移行し、ほとんどすべてをカバーします実用的な方法での方法とその使用法(おそらく、これらの種類の概念はおそらくそれを必要としたので、理論も少しだけ)

MS開発者がそのような資料を提供するのに時間がかかることは素晴らしいと思いますが、このコミュニティは私たち自身の資料の作成を開始するのに十分だと思いますか?

38

私は実際に数日前に同じような考えを持っていました。 Rx MSDNフォーラムの投稿として独自の「101 Rx Samples」を開始しましたが、それ以降はWiki形式に移行しました。お気軽にご来店いただき、ご自身のサンプルを追加してください!

Rx wikiの101 Rxサンプル

27
Robert Hencke

まず、簡単な描画アプリケーションを示します。ユーザーがドラッグすると、最初のマウスダウン位置から現在の位置に赤い線が描画され、現在の位置に青い点も描画されます。これは、先週のRxのハッキングの結果です

A WPF Drawing Demo

そして、これがソースコードです。

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

詳細な説明はこちらの投稿をご覧ください および こちらからソースコードをダウンロードしてください

お役に立てれば

13
amazedsaint

別の有用なリソースは Reactive Extensions(Rx)Koans です:Rxを学ぶのに役立つ55の進歩的な例

8
avandeursen

私は http://www.introtorx.com を読んでいます。これは、名前が示唆するように、簡潔な紹介のようです。非常に多くの(非常に基本的な)例がステップバイステップで表示され、主にコンソールを使用して印刷します。

5
Luciano

Windowsフォーム用の Wes Dyerによるドラッグアンドドロップサンプル のバリエーションを以下に示します(おそらく、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/ は演​​算子を視覚化する非常に素晴らしい方法を提供します。

3
Costin

そして、Stock ViewerGithubの例 enter image description here

  1. StreamProviderはサーバーからデータをプルし、Rx.NET IObservableストリームを生成します。
  2. StreamAggregatorは、すべてのIObservableストリームを集約し、結果を中央処理スレッドに複製します。
  3. ビューは単一のストリームをフィルタリングし、表示のために結果を独自のスレッドに複製します。

すべてのStreamProviders、StreamAggregate、およびViewは、独自のスレッドで実行されます。これは、実際の株価表示アプリケーションの典型的なスレッドモデルでもあります。

この例は、WPF DataGridの単純なパフォーマンステストスケルトンにもなります。処理された1秒あたりのティック数を計算し、ビューに表示します。

2
Xiaoguo Ge