为什么我的进程的退出方法没有被调用?

时间:2010-12-21 21:40:19

标签: c# .net

我有以下代码,但为什么ProcessExited方法从未调用过?如果我不使用Windows shell(startInfo.UseShellExecute = false),那就是一样。

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = path;
startInfo.Arguments = rawDataFileName;
startInfo.WorkingDirectory = Util.GetParentDirectory(path, 1);

try
{
     Process correctionProcess = Process.Start(startInfo);
     correctionProcess.Exited += new EventHandler(ProcessExited);                   

     correctionProcess.WaitForExit();

     status = true;
}

.....

internal void ProcessExited(object sender, System.EventArgs e)
{
      //print out here
}

5 个答案:

答案 0 :(得分:214)

要在Exited事件上收到回调,EnableRaisingEvents必须设置为true。

Process correctionProcess = Process.Start(startInfo);
correctionProcess.EnableRaisingEvents = true;
correctionProcess.Exited += new EventHandler(ProcessExited); 

答案 1 :(得分:27)

来自MSDN

  

退出事件表明该事件   退出相关流程。这个   发生意味着要么   流程终止(中止)或   成功关闭。这个事件可以   只有在值的时候才会出现   EnableRaisingEvents属性为true。

您是否将该属性设置为true?

答案 2 :(得分:17)

您必须将Process.EnableRaisingEvents设置为true

答案 3 :(得分:13)

设置correctionProcess.EnableRaisingEvents = true

答案 4 :(得分:0)

我遇到了将new Process()放在using子句中的示例。如果要使用Exited功能,请不要这样做。 using子句会破坏实例以及Exited上的所有事件句柄。

这个...

using(var process = new Process())
{
   // your logic here
}

应该是这个...

var process = new Process();