0

ユーザーがフォームの閉じるボタンを押すと、メッセージ ボックスを介してプロセス (java.exe) を停止するコードを実行しています。したがって、「はい」ボタンを押すと、プログラムは実行中のすべてのプロセスをスキャンし、プロセスが実行中かどうかを確認します。プロセスが実行されていない場合は、アプリケーションを強制終了します。

問題は、メッセージが複数回ポップアップすることです。これは、彼がクロージング イベントをアクティブにし続けるために発生しますが、これを正しい方法でコーディングする方法がわかりません。

if (_isRunning)
{
    if (MessageBox.Show("Are you sure you want to quit?", "Confirm Quit", MessageBoxButtons.YesNo) ==
        DialogResult.Yes)
    {
        Stop();
        _exited = true;

        foreach (Process x in Process.GetProcesses())
        {
            while (x.Id == _processID)
            {
                Application.Exit();
                e.Cancel = true;
                return;
            }
        }
    }
}

何か案は?

4

2 に答える 2

0

閉じるボタン (またはフォーム全体) を押した後に無効にするのはどうですか? こうすることで、何の役にも立たないように見える [閉じる] ボタンがユーザーに表示されることはありません。

一般に、このように長い間ユーザー入力をブロックすることはお勧めできません。操作が完了するまでに 1 秒以上かかる場合は、プログレス バーを表示する価値があるかもしれません。

また、 Application.Exit() の使用は怪しいようです。foreachブロックで正確に何を達成しようとしていますか?

また、C# で winforms アプリケーションを適切に閉じるにはどうすればよいですか?も参照してください。

于 2012-04-27T18:40:27.387 に答える
0

メッセージループにいるので、マルチスレッドの手間をかけずに複数の呼び出しを防ぐことができます:

private bool _isClosing = false;

void Form_Closing(object sender, EventArgs e) {
    if (_isClosing) return;

    _isClosing = true;
   if (_isRunning) {
      // ....Clean up code....
   }
   _isClosing = false;
}
于 2012-04-27T18:44:07.407 に答える