違い - c# 終了コード




C#アプリケーションを正しく終了するには? (6)

私はC#で公開されたアプリケーションを持っています。 ここでの問題は、赤色の終了ボタンをクリックしてメインフォームを閉じると、フォームを閉じますが、アプリケーションを閉じることはありません。 私はコンピュータをシャットダウンしようとしたときにこれを見つけました。私が作ったアプリケーションがスムーズに動くことを期待して、私はMessageBox Alertsを置いたたくさんの子ウィンドウに砲撃されました。

私はApplication.Exitを試しましたが、それでもすべての子ウィンドウとアラートを呼び出すので、 Environment.Exitとそれに入れる整数を使用する方法がわかりません。 ちなみに、私のフォームがformclosedまたはフォームclosingイベントを呼び出すときは、 this.Hide()関数をthis.Hide()てアプリケーションを閉じます。 アプリケーションがどのように動作しているかに影響しますか?


ところで。 私のフォームがformclosedまたはform closingイベントを呼び出すたびに、this.Hide()関数を使用してアプリケーションを閉じます。 アプリケーションがどのように動作しているかに影響しますか?

要するに、はい。 メインフォーム( MainメソッドのApplication.Runで開始されたフォーム)が閉じられている(非表示ではない)ときに、アプリケーション全体が終了します。

メインフォームが閉じられたときにアプリケーション全体が常に完全に終了する必要がある場合は、そのフォームクローズドハンドラを削除するだけです。 そのイベントをキャンセルしないで、ユーザーがイベントを閉じたときに閉じるようにするだけで、目的の動作が得られます。 他のすべてのフォームについては、フォームの同じインスタンスを再び表示するつもりがない場合は、閉じてしまうことを防ぎ、隠すのではなく、単にフォームを閉じさせるだけです。 あなたがそれらを再び見せている場合、それらを隠すことは良いかもしれません。

ユーザーにメインフォームの「x」をクリックさせたいが、別のフォームを開いたままにして、実質的に「新しい」メインフォームにしたい場合は、もう少し複雑です。 そのような場合は、メインフォームを閉じずに隠すだけで済みますが、 実際にアプリケーションを終了したいときは、メインフォームを実際に閉じるメカニズムを追加する必要があります。 これがあなたの状況であれば、実際にプログラムを終了すべきであるかどうかを説明する質問の詳細を追加する必要があります。


MSDNから:

Application.Exit

終了する必要があるすべてのメッセージポンプに通知し、メッセージが処理された後にすべてのアプリケーションウィンドウを閉じます。 これは、Application.Run(WinFormsアプリケーション)を呼び出した場合に使用するコードです。このメソッドは、すべてのスレッドで実行中のメッセージループをすべて停止し、アプリケーションのすべてのウィンドウを閉じます。

Environment.Exit

このプロセスを終了し、基になるオペレーティングシステムに指定された終了コードを与えます。 これは、コンソールアプリケーションを使用しているときに呼び出すコードです。

この記事、 Application.ExitとEnvironment.Exitは、良いヒントに向けて指摘しています。

System.Windows.Forms.Application.MessageLoopプロパティをチェックすることによって、 System.Windows.Forms.Application.Runが呼び出されたかどうかを判断できます。 trueの場合、Runが呼び出され、WinFormsアプリケーションが次のように実行されていると仮定できます。

if (System.Windows.Forms.Application.MessageLoop) 
{
    // WinForms app
    System.Windows.Forms.Application.Exit();
}
else
{
    // Console app
    System.Environment.Exit(1);
}

参照: Application.Exitが機能しないのはなぜですか?


やりますか?

Application.Run(myForm);

あなたのメイン()に?

私は、フォームが閉じられたときにアプリケーションを強制終了する非常に簡単な方法であることが判明しました。


必要なのはSystem.Environment.Exit(1);

また、プロジェクトを開始するときにシステムの名前空間「using System」が使用されています。


私は次のいずれかです:

Application.Exit();

winformまたは

環境。終了(0);

コンソールアプリケーション用です(winformsでも動作します)。

ありがとう!


Environment.Exit(exitCode); //exit code 0 is a proper exit and 1 is an error




exit