从捕获块内引发事件

本文关键字:事件 | 更新日期: 2023-09-27 18:35:33

我正在尝试从 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方法中捕获异常。