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.Cancelfalse

サンプル

// 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 に答える