1

我正在使用这个:

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

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

4

4 回答 4

12

您需要设置Process.EnableRaisingEventstrue

于 2012-06-06T19:39:08.760 回答
6

您忘记将 设置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();
于 2012-06-06T19:41:13.613 回答
4

你忘记了启用事件

Process p;
p = Process.Start("cmd.exe");
p.EnableRaisingEvents = true;
p.Exited += (sender, ea) =>
            {
                  System.Windows.Forms.MessageBox.Show("Cmd was Exited");
            };
于 2012-06-06T19:39:28.367 回答
3

您可以在之后触发警报proc2.WaitForExit()

于 2012-06-06T19:37:39.397 回答