如何知道Process.Start()创建的进程何时关闭?

时间:2012-06-06 19:35:31

标签: c# process system-calls

我正在使用它:

var proc2 = Process.Start(Path.GetFullPath(filename));
                proc2.Exited += (a, b) =>
                    {
                        MessageBox.Show("closed!");
                    };

但我关闭窗口却没有MessageBox.Show("closed!");。如何解决这个问题?

4 个答案:

答案 0 :(得分:12)

您需要将Process.EnableRaisingEvents设置为 true

答案 1 :(得分:5)

您忘记将EnableRaisingEvents设置为true。

此外,您可能希望使用构造函数创建Process,设置ProcessStartInfo,然后在注册后调用Start以侦听事件。否则你有一个竞争条件,在你注册听取事件之前,进程退出(不太可能我知道,但在数学上不可能)。

var process = new Process();

process.StartInfo = new ProcessStartInfo(Path.GetFullPath(filename));
process.EnableRaisingEvents = true;

process.Exited += (a, b) =>
{
  MessageBox.Show("closed!");
};

process.Start();

答案 2 :(得分:4)

你忘了启用事件

Process p;
p = Process.Start("cmd.exe");
p.EnableRaisingEvents = true;
p.Exited += (sender, ea) =>
            {
                  System.Windows.Forms.MessageBox.Show("Cmd was Exited");
            };

答案 3 :(得分:3)

您可以在proc2.WaitForExit()

之后触发警报