如何处理Process类返回的错误?

时间:2018-10-25 09:46:32

标签: c# error-handling process runtime-error

我使用一个代理类,其中包装了一个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);

1 个答案:

答案 0 :(得分:1)

使用new构造一个Process实例,连接事件处理程序,然后通过对该实例调用Start方法来启动该过程。