Я использую прокси-класс, в котором я обертываю экземпляр Process, я реализовал событие ErrorDataReceived, которое перенаправляет в реальное событие Process.Но в любом случае - даже без прокси-класса - я просто не понимаю, как использовать это событие.
Проблема в том, что static Process.Start () возвращает экземпляр Process, к которому я могу подключить свойобработчики событий.Таким образом, в основном я не могу подписаться на событие до того, как процесс был запущен, но тогда у меня нет ничего, на что можно подписаться, и в моем случае это дает мне исключение NullReferenceException, потому что мой обернутый экземпляр Process в этот момент равен нулю.
Но могу ли я быть уверен, что ошибка еще не произошла между вызовом и подпиской?Кто-нибудь знает лучшее решение, чтобы ловить ошибки?Этот процессный класс доставляет мне немало хлопот, есть несколько способов сделать что-то, но сом мне не совсем понятен.Также чтение 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;
}
}
}
}
Если я сделаю s.th.например, тогда это, очевидно, исключение NullReferenceException, поскольку внутренний объект Process имеет значение null:
AprocessProxy.ErrorDataReceived += OnError;
processProxy.Start(ProcessStartInfo);