C# 为什么我的流程是';未调用的已退出的方法?
我有以下代码,但为什么从未调用C# 为什么我的流程是';未调用的已退出的方法?,c#,.net,C#,.net,我有以下代码,但为什么从未调用ProcessExited方法?如果我不使用Windows shell(startInfo.UseShellExecute=false),情况也一样 要在退出事件时接收回调,必须将设置为true Process correctionProcess = Process.Start(startInfo); correctionProcess.EnableRaisingEvents = true; correctionProcess.Exited += new Even
ProcessExited
方法?如果我不使用Windows shell(startInfo.UseShellExecute=false
),情况也一样
要在退出事件时接收回调,必须将设置为true
Process correctionProcess = Process.Start(startInfo);
correctionProcess.EnableRaisingEvents = true;
correctionProcess.Exited += new EventHandler(ProcessExited);
您必须从以下位置将
进程。EnableRaisingEvents
设置为true
:
退出的事件表示
关联进程已退出。这
事件意味着
进程终止(中止)或
已成功关闭。这件事可以
仅当
EnableRaisingEvents属性为true
您是否已将该属性设置为true?设置correctionProcess.EnableRaisingEvents=true我遇到过使用子句将
新流程()
放置在中的示例。如果要使用退出的功能,请不要这样做。using
子句将销毁实例以及退出的上的任何事件句柄
这个
using(var process = new Process())
{
// your logic here
}
应该是这个
var process = new Process();
它也是一个非常非idomatic的标志(不管怎样,如果我不想要这个活动,我就不订阅它有什么用!)不是很直观。应在每个事件描述中明确说明需要设置此标志。correctionProcess.WaitForExit(),没有此函数,此代码对我无效一个小提示(特别是非C#专家):不要Close()
流程!由于在资源管理方面的错误工作,我遇到了退出处理程序的间歇性问题。所讨论的代码在Process.Start(startInfo)
之后调用了Process.Close()
,而不是允许GC在适当的时候收集它。如果您的背景是非GC语言(例如C/C++),那么很容易出错。很好。谢谢我还想指出,EnableRaisingEvents
和EventHandlers
的赋值必须在Process.Start()之后完成。否则它不会工作。@Doruk我可以在调用Process.Start()
之前设置EnableRaisingEvents=true
,它工作正常。我也注意到了这一点。奇怪的是,OutputDataReceived事件工作正常。或者,它们可能发生得太快,以至于在主线程中的执行结束之前就结束了。
using(var process = new Process())
{
// your logic here
}
var process = new Process();