3

MSDNによると

Showメソッドを使用してフォームが表示された場合、Disposeが自動的に呼び出されます。ShowDialogなどの別のメソッドが使用されている場合、またはフォームがまったく表示されない場合は、アプリケーション内でDisposeを呼び出す必要があります。

経由でフォームを起動するとどうなりますか

System.Windows.Forms.Application.Run(form);

フォームを閉じると、実行を続行できます。ブロックの後でform.ShowDialogue()を呼び出すと、。がスローされますObjectDisposedException。確かに、form.Dispose()経由でフォームを起動するときに電話をかける必要Application.Run()がありますか、それともそうすることの利点または欠点はありますか?

4

2 に答える 2

4

ApplicationContextクラスは、UIスレッドの存続期間を制御します。そのExitThread()メソッドは、内部メッセージループを終了するシャットダウンを開始します。Application.Run(Form)オーバーロードを使用すると、WinformsはApplicationContext(Form)コンストラクターを使用してApplicationContextを作成します。フォームのHandleDestroyedイベントをサブスクライブするイベントハンドラーは、ExitThread()を呼び出します。

したがって、存続期間は、フォームのネイティブWindowsウィンドウが有効であるかどうかに完全に基づいています。そのウィンドウを破棄する2つの一般的な方法は、ユーザーがウィンドウの[閉じる]ボタンをクリックするか、アプリが[閉じる]または[破棄]メソッドを呼び出すことです。いずれにせよ、フォームは自動的に破棄されます。この後、フォームオブジェクトは停止し、それを復活させようとするとODEがスローされます。

于 2012-09-24T17:35:05.173 に答える
1

投稿して間もなく、MSDNの別の領域で答えを見つけました

FormクラスのDisposeメソッドは、このメソッドが返される前に呼び出されます。

于 2012-09-24T17:06:51.013 に答える