Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的流程是';未调用的已退出的方法?_C#_.net - Fatal编程技术网

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();