スレッドからフォームを閉じる必要があり、Close() メソッドを呼び出すためにフォームの Invoke メソッドを使用しています。
問題は、閉じるときにフォームが破棄され、「ウィンドウ ハンドルが作成されるまで、Invoke または BeginInvoke をコントロールで呼び出すことはできません。」というメッセージとともに InvalidOperationExecption が返されることです。
Close メソッドで「Step Into」を使用してデバッグする場合にのみこの例外が発生しましたが、通常の実行時にエラーが発生する可能性があるという危険を冒したくありません。
これは、それを再現するためのサンプル コードです。
private void Form1_Load(object sender, EventArgs e)
{
Thread thread = new Thread(CloseForm);
thread.Start();
}
private void CloseForm()
{
this.Invoke(new EventHandler(
delegate
{
Close(); // Entering with a "Step Into" here it crashes.
}
));
}
フォームは、フォームの自動生成コードに配置されます (これは変更したくありません)。
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
誰かがこれまたは別のスレッドからフォームを閉じる別の方法の解決策を教えていただければ幸いです。