为什么Process的Exited方法不被调用?

我有以下代码,但为什么ProcessExited方法从来没有被调用? 这是一样的,如果我不使用Windowsshell( 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 } 

为了接收Exited事件的callback, EnableRaisingEvents必须设置为true。

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

来自MSDN :

Exited事件表示关联的进程退出。 这种情况意味着进程终止(中止)或成功closures。 只有当EnableRaisingEvents属性的值为true时,才会发生此事件。

你把这个属性设置为true吗?

您必须将Process.EnableRaisingEvents设置为true

设置correctionProcess.EnableRaisingEvents = true