Greg Dがここで説明しているものと同様のSafeInvokeControl拡張メソッドがあります(IsHandleCreatedチェックを除く)。
私はそれSystem.Windows.Forms.Form
を次のように呼んでいます:
public void Show(string text) {
label.SafeInvoke(()=>label.Text = text);
this.Show();
this.Refresh();
}
場合によっては(この呼び出しはさまざまなスレッドから発生する可能性があります)、次のエラーが発生します。
System.InvalidOperationException
発生した
Message
= "ウィンドウハンドルが作成されるまで、コントロールでInvokeまたはBeginInvokeを呼び出すことはできません。"
Source
= "System.Windows.Forms"
StackTrace: at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at System.Windows.Forms.Control.Invoke(Delegate method) at DriverInterface2.UI.WinForms.Dialogs.FormExtensions.SafeInvoke[T](T control, Action`1 action) in C:\code\DriverInterface2\DriverInterface2.UI.WinForms\Dialogs\FormExtensions.cs:line 16
何が起こっているのですか、どうすれば修正できますか?フォーム作成の問題ではないことはわかっています。一度は機能し、次回は失敗することがあるので、問題は何でしょうか。
PS。私は本当にWinFormsでひどいです、誰かがモデル全体とそれを扱う方法を説明する良いシリーズの記事を知っていますか?