1. ホーム
  2. c#

[解決済み】C#アプリケーションを適切に終了させる方法は?

2022-04-05 14:06:05

質問

C#で作成した公開アプリケーションを持っています。問題は、赤い終了ボタンをクリックしてメインフォームを閉じるたびに、フォームは閉じますが、アプリケーションが閉じないことです。私が作ったアプリケーションがスムーズに動作していることを期待してコンピュータをシャットダウンしてみると、たくさんの子ウィンドウに襲われました。 MessageBox アラートを表示します。

試してみた Application.Exit が、やはりすべての子ウィンドウやアラートを呼び出してしまうので、どのように Environment.Exit と、どの整数を入れればいいのか。

ちなみに、私のフォームでは formclosed または form closing イベントを使ってアプリケーションを閉じます。 this.Hide() 関数があります。これは、私のアプリケーションが現在どのように動作しているかに影響しますか?

解決方法は?

MSDNより。

アプリケーションの終了

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

環境設定

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

この記事 Application.ExitとEnvironment.Exitの比較 は、良いヒントを指し示しています。

を判断することができます。 System.Windows.Forms.Application.Run が呼び出されたことを確認するために System.Windows.Forms.Application.MessageLoop プロパティがあります。もし 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がうまくいかないのですか?