【问题标题】:How to know when a process created by Process.Start() was closed?如何知道 Process.Start() 创建的进程何时关闭?
【发布时间】:2012-06-10 20:48:44
【问题描述】:

我正在使用这个:

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

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

【问题讨论】:

  • 您是否验证过该过程实际上已结束?

标签: c# process system-calls


【解决方案1】:

您需要将Process.EnableRaisingEvents 设置为true

【讨论】:

    【解决方案2】:

    您忘记将 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();
    

    【讨论】:

      【解决方案3】:

      您忘记启用事件

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 它有一个可以指定超时的重载方法。不幸的是,它不会杀死你的进程,它会继续前进
        猜你喜欢
        • 2016-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 2017-05-06
        • 2011-08-10
        • 2020-11-22
        • 2013-05-17
        相关资源
        最近更新 更多