読者です 読者をやめる 読者になる 読者になる

【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なんて更新されないんでしょうね。