Application.Runは、ArgumentExceptionがスローが未処理でした
-
23-08-2019 - |
質問
私はアプリケーションを終了する必要がある状態を持っていると私はcertianフラグを設定するので、私はthis.Dispose()をコールします。
最初に私はそれが私がthis.Dispose(呼び出した後の関数を呼び出すの問題だと思った)ので、私はと呼ばれる最後のものになるようにコードを移動し、私はまだ取得パラメータが有効ではありません」「ArgumentExceptionがを未処理でした」 。」 Application.Run(新しいて、myApp()で、行
。私が間違って何をしているのですか?私は道に沿って何かを逃しましたか?それともアプリケーションを閉じるには良い方法はありますか?
解決
アプリケーションを終了するApplication.Exit()
を使用してみてください。
Application.Run(new MyForm());
を使用する場合は、、メッセージループは、メインフォームとフォームオブジェクトを使用してスレッド上に作成されます。これは、それぞれのオブジェクトへの適用に来ているのWin32メッセージを配信しようとします。フォームオブジェクトにDispose()
を呼び出すときしかし、あなたはまだメッセージループを終了していません。それはあなたのフォームオブジェクトに次のメッセージを配信しようとすると、それがすでに配置されますので、失敗して例外がスローされます。あなたは、どちらかは、イベントを処理するためのフォームを尋ねると、完了した場合、その後のメッセージループを終了します(フォーム上Close
を呼び出すことによって)クローズするフォームを、要求する必要があります。他の方法(より直接的な方法は)完全に、すべての関連するフォームを閉じることになりますApplication.Exit()
を呼び出すことにより、スレッドのメッセージループをシャットダウンすることです。
他のヒント
あなたはあなたのメインフォームを閉じるためにthis.Close()ではなくthis.Dispose()を使用する必要があります。
あなたは本当に廃棄を()を呼び出す必要はありません。