.NET4.0の新しいReactiveFrameworkについては、かなりの誇大宣伝がありました。私はその基本的な概念を理解していなかったと思いますが、それがそれほど有用であるということは完全には売られていません。Rxのパワーと有用性を完全に示す良い例(それは中途半端に理解しやすい)を思い付くことができますか?Rxを使用すると、生活がとても楽になるものを見せてください。
2 に答える
これが簡単な例です。LINQ toイベントを使用して、完全に宣言的な方法でドラッグ操作をプログラムします。
//Create an observable with 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),
};
そして、startposからcurrentposに線を引きます
//Subscribe and draw a line from start position to current position
mouseDragPoints.Subscribe
(item =>
{
//Draw a line from item.Startpos to item.CurrentPos
}
);
ご覧のとおり、場所全体にイベントハンドラーはなく、状態を管理するためのブール変数もありません。
これらのGetEventName()メソッドに興味がある場合は、この記事全体を読み、ソースコードをダウンロードして試してみることをお勧めします。
最近、私のブログで段階的にデモを書きました: http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/
私は基本的に、Rx と Bing Search を使用して WPF で小さなアプリを構築しています。
アプリは入力を停止するまで待機し、非同期検索を実行して結果を表示します。結果が得られる前に別の検索を発行すると、既存の検索が自動的に削除されます。
Enter キーまたは「Go!」ボタンをクリックし、[クリア] ボタンを押して進行中の検索を停止できます。ビジー インジケータといくつかのエラー処理があります (たとえば、ネットワークがダウンした場合)。
主なトピック:
- イベントからオブザーバブルを作成する (TextChanged、Button.Click など)
- 非同期デリゲート (非同期検索)
- TakeUntil拡張子
- DistinctUntilChanged 拡張 (カスタム Equals を含む)
- マージ拡張機能
- スロットルエクステンション
- ObserveOn 拡張 (UI スレッドの同期用)
.. もっと!