別スレッドからコントロールを操作する(Invoke)
C#で別スレッドからコントロールを操作したい場合はInvokeを用いると良い事がわかった。基本的に以下のように用いる。
if (control.InvokeRequired) { control.Invoke(new delegateの名前(呼びたいメソッド), 引数); } else { 呼びたいメソッド(引数); }
とする。最初の引数がDelegateなのでここでは型指定でnewする必要がある模様。めんどい。でも安全には代えられない。ちなみにInvokeの代わりにBeginInvokeを用いると非同期に実行できる。結果を受け取りたい場合は、BeginInvokeの返値を好きなタイミングでEndInvokeに渡してやれば良い。Debug時はCheckForIllegalCrossThreadCallsは基本的にtrueにしておくと幸せになれそう。