bxdxmx3

きじれてじろあ なきがせすで あぷせとねでぶ

.NET Reactive Frameworkをちょっとかじってみた

コード

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        // ucコントロールのMouseMoveイベントをキャッチするよう登録
        // X座標が300以下の場合はi++
        // ※observerのdisposeは省略。
        Observable.FromEvent<MouseEventArgs>(uc, "MouseMove")
            .Where( e => e.EventArgs.GetPosition(uc).X <= 300)
            .Subscribe(
                () => i++
            );
    }

    private int i = 0;

    private void UserControl_MouseMove(object sender, MouseEventArgs e)
    {
        tc.Text = string.Format("x={0}, y={1}", e.GetPosition(uc).X, e.GetPosition(uc).Y);
        tb.Text = i.ToString();
    }
}

なるほど、まさしくLINQ to Eventsですね。
これは便利そうだ。

X座標>300なのでカウントアップしない

f:id:eo-oe-aaaa:20090819141241j:image

X座標<=300なのでカウントアップする

f:id:eo-oe-aaaa:20090819141242j:image