【C#】Windows FromのInvokeが面倒くさいから拡張メソッドを作る
まー理屈はわかる。確かにその方がいい。ただ厄介なのは、引数がDelegateなせいでそのままラムダ式を書けないし、匿名メソッドもそのまま使えない。MethodInvokerでキャストしてやる必要がある。
//匿名メソッド版 this.Invoke((MethodInvoker)delegate() { // Do something }); //ラムダ式版 this.Invoke((MethodInvoker)(() => { // Do something }));
でもこんなのこうしたいじゃないですか。
//Action受け取ってくれよ this.Invoke(() => { });
そうしましょう。
public static void Invoke(this Control control, Action act) { if (control.IsHandleCreated) { control.Invoke((MethodInvoker)(() => act())); } }
ついでにControl.IsHandleCreatedプロパティをチェックしてやれば完璧です。こんぐらいさくーっとMSに作ってもらいたいんですが、もうWindows Formなんて更新されないんでしょうね。