1

如果我必须再声明一点,请告诉我,这里有点晚了。

我有一个小问题,这段代码一直在循环:(...

我有这个

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

1 回答 1

1

描述

它不断循环,因为您Application.Exit()在此方法内部调用。我不知道你想做什么,但我想你想问用户他是否真的想关闭应用程序。如果您设置e.Cancel = true它意味着您取消事件,所以在您的情况下,您取消以关闭应用程序。

因此,如果您询问“确定要退出”并且用户选择“否”,则您应该设置e.Cancel = true,如果没有,则什么也不做,因为默认e.Cancel值为false.

样本

// create a list of process
private List<Process> processes = new List<Process>();

// if you start a process
Process myProcess = //;
processes.Add(myProcess);

// on closing
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    var isAProcessRunning = processes.Where(p => p.HasExited == false);

    if (isAProcessRunning.Any()) 
    {
      // some process is already running, ask the user 

        if (MessageBox.Show("Are you sure you want to quit?", "Confirm Quit", MessageBoxButtons.YesNo) ==
        DialogResult.No)
        {
            e.Cancel = true;
        }
     }
  }

更多信息

于 2012-04-27T18:51:46.460 回答