我正在尝试从 catch 块引发一个事件,基本上我有一个类,我在其中进行一些处理,如果它抛出和异常,我需要从调用方法中知道这一点。由于此解决方案的分布式性质,异常以不同的方式记录和抛出和处理,因此我无法将异常冒泡到表面,因此无法从调用方法知道该过程失败,我尝试从 finally 块引发事件,并尝试将布尔变量作为 ref 并在 catch 中将其设置为 false,但它也没有用。以下是我正在尝试执行的操作的简化版本:
static void Main(string[] args)
{
var error = false;
var demo = new Demo();
ProcessThis(demo, 0);
demo.ErrorEvent += () => error = true;
Console.WriteLine(error.ToString());
Console.ReadKey();
}
private static void ProcessThis(Demo demo, int val)
{
try
{
var result = 10/val;
}
catch (Exception)
{
Console.WriteLine("error");
demo.RaiseErrorEvent();
throw;
}
}
public class Demo
{
public event ErrorDelegate ErrorEvent;
public delegate void ErrorDelegate();
public void RaiseErrorEvent()
{
if (this.ErrorEvent != null)
{
this.ErrorEvent();
}
}
}
在调用方法之前,需要附加事件处理程序:
demo.ErrorEvent += () => error = true;
ProcessThis(demo, 0);
这仍然不起作用,因为您使用的是 throw;
.您需要Main
方法中捕获异常。