我使用一个代理类,其中包装了一个Process实例,我实现了ErrorDataReceived事件,该事件转发到实际的Process事件。但是无论哪种方式-即使没有代理类-我只是不了解如何使用此事件。
问题在于静态Process.Start()返回一个Process实例,我可以将其事件处理程序连接到该实例。因此,基本上,我无法在流程开始之前订阅该事件,但是然后我没有什么要订阅的,在我的情况下,这给了我NullReferenceException,因为此时包装的Process实例为null。
但是我可以确定在调用和订阅之间还没有发生该错误吗?有人知道更好的解决错误的方法吗?这个过程类困扰着我很多,做事有多种方式,对我来说并不完全清楚。如果没有错误,还读取ErrorOutputStream会阻止应用程序...
一些上下文:
public class ProcessProxy : IProcessProxy
{
private object lockObject = new object();
public Process Process { get; private set; }
public void Start(ProcessStartInfo processStartInfo)
{
Process = Process.Start(processStartInfo);
}
public bool WaitForExit(int milliseconds)
{
return Process.WaitForExit(milliseconds);
}
public event DataReceivedEventHandler ErrorDataReceived
{
add
{
lock (lockObject)
{
Process.ErrorDataReceived += value;
}
}
remove
{
lock (lockObject)
{
Process.ErrorDataReceived -= value;
}
}
}
}
如果我做某事。像这样,那么这显然是NullReferenceException,因为内部Process对象为null:
AprocessProxy.ErrorDataReceived += OnError;
processProxy.Start(ProcessStartInfo);
答案 0 :(得分:1)
使用new
构造一个Process
实例,连接事件处理程序,然后通过对该实例调用Start
方法来启动该过程。