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 回答