Jeff Van Gogh のブログの Reactive Extensions for javascript のデモを見て、C#/Winforms で試してみようと思ったのですが、うまく機能していないようです。
これをフォームのコンストラクターに投げました(Rxフレームワークがインストールされ参照されています):
Observable.Context = SynchronizationContext.Current;
var mousemove = Observable.FromEvent<MouseEventArgs>(this, "MouseMove");
var message = "Time flies like an arrow".ToCharArray();
for(int i = 0; i < message.Length; i++)
{
var l = new Label()
{
Text = message[i].ToString(),
AutoSize = true,
TextAlign = ContentAlignment.MiddleCenter
};
int closure = i;
mousemove
.Delay(closure * 150)
.Subscribe(e =>
{
l.Left = e.EventArgs.X + closure * 15 + 10;
l.Top = e.EventArgs.Y;
//Debug.WriteLine(l.Text);
});
Controls.Add(l);
}
マウスを動かすと、文字がランダムな順序で移動するように見えます。デバッグ行のコメントを外すと、同じ文字に対して複数のイベントが表示されます...
何か案は?スロットルを試してみましたが、違いはないようです。これらすべてのラベルを移動するように WinForms に要求しすぎているのでしょうか?
( Rxフォーラムに投稿されたクロス)