我有以下代码,但为什么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
}
答案 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();