2007年08月13日
Control.Invokeの書き方
Control.Invokeの書き方について、ちょっと考察。
これが、C#1.1の頃の書き方。
これが C#2.0になると、
と書ける。さらに、 MethodInvoker という delegateが定義済みなので、
とさらに簡単になる。
しかし、次の書き方がどうしてOKなのかが、はっきりとは分からない。
たぶん、
が、
って書けるのと関係しているんだと思うけど...
誰か教えてくれないかな。
...
そんなことより、
で良いと思うんだけど。これだとエラーになってしまう。
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 = "ほにゃらら";
});
}で良いと思うんだけど。これだとエラーになってしまう。



