C# 如何捕获DataReceiveDevenHandler引发的异常?

C# 如何捕获DataReceiveDevenHandler引发的异常?,c#,exception,process,C#,Exception,Process,如何捕获由DataReceiveDevenHandler引发的异常 此帖子与我的帖子相同,但针对异步方法而不是处理程序: 下面是我的代码的一个过于简化的版本: publicstaticvoidmain() { 尝试 { 使用(Process=CreateProcess()) { process.Start(); process.BeginErrorReadLine(); process.WaitForExit(); } } 捕获(例外e) { Console.WriteLine(e.Mes

如何捕获由
DataReceiveDevenHandler
引发的
异常

此帖子与我的帖子相同,但针对异步方法而不是处理程序:

下面是我的代码的一个过于简化的版本:

publicstaticvoidmain()
{
尝试
{
使用(Process=CreateProcess())
{
process.Start();
process.BeginErrorReadLine();
process.WaitForExit();
}   
}
捕获(例外e)
{
Console.WriteLine(e.Message);//永远不在这里
}
}
私有静态进程CreateProcess()
{
流程=新流程();
process.ErrorDataReceived+=ActionOnErrorDataReceived;
返回过程;
}
私有静态无效操作OnErrorDataReceived(对象发送方,DataReceivedEventArgs e)
{
抛出新异常(e?数据);
}

多亏了Dortimer,我才明白,从事件处理程序中抛出异常是一种糟糕的做法。因此,这里有一个同等的方法来实现我想要做的事情:

bool error=false;
string errorMsg=string.Empty;
公共静态void Main()
{
尝试
{
使用(Process=CreateProcess())
{
process.Start();
process.BeginErrorReadLine();
process.WaitForExit();
如果(错误)
{
抛出新异常(errorMsg);
}
}   
}
捕获(例外e)
{
控制台写入线(e.Message);
}
}
私有静态进程CreateProcess()
{
流程=新流程();
process.ErrorDataReceived+=ActionOnErrorDataReceived;
返回过程;
}
私有静态无效操作OnErrorDataReceived(对象发送方,DataReceivedEventArgs e)
{
错误=真;
errorMsg=e?数据;
进程p=(发送方作为进程);
如果(p!=null&&p.HasExited==false)
{
p、 杀死();
}
}

是否有特定原因导致无法在事件处理程序中使用
try catch
块?这可能有一些有用的信息:我认为我遗漏了一些东西,但并不认为这是一个坏的做法。我会用另一种方式做。谢谢你的链接!