2007年08月13日

Control.Invokeの書き方

   このエントリーをはてなブックマークに追加 Clip to Evernote
Control.Invokeの書き方について、ちょっと考察。

private delegate void MyDelegate();

private void MyDisplay() {
label1.Text = "ほにゃらら";
}

private void Foo(...) {
this.Invoke(new MyDelegate(MyDisplay));
}

これが、C#1.1の頃の書き方。

これが C#2.0になると、

private delegate void MyDelegate();

private void Foo(...) {
this.Invoke(new MyDelegate(delegate {
label1.Text = "ほにゃらら";
}));
}

と書ける。さらに、 MethodInvoker という delegateが定義済みなので、

private void Foo(...)  {
this.Invoke(new MethodInvoker(delegate {
label1.Text = "ほにゃらら";
}));
}

とさらに簡単になる。
しかし、次の書き方がどうしてOKなのかが、はっきりとは分からない。

private void Foo(...)  {
this.Invoke((MethodInvoker)delegate {
label1.Text = "ほにゃらら";
});
}

たぶん、

button1.Click += new EventHandler(button1_Click);

が、
button1.Click += button1_Click;

って書けるのと関係しているんだと思うけど...
誰か教えてくれないかな。

...
そんなことより、

private void Foo(...)  {
this.Invoke(delegate {
label1.Text = "ほにゃらら";
});
}

で良いと思うんだけど。これだとエラーになってしまう。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51052746
この記事へのトラックバック
C# の匿名メソッドやデリゲートについて。「窓際プログラマーの独り言:Control.Invokeの書き方」への返答。
Re: Control.Invokeの書き方【まじかんと雑記】at 2007年08月14日 12:29