比单个事件处理程序更好的事件来引发异步方法

本文关键字:异步方法 事件 单个 事件处理 程序 更好 | 更新日期: 2023-09-27 17:51:09

目前调用线程池上的方法,如果有任何异常,我正在使用单个事件处理程序的事件,并使用BeginInvoke()调用事件处理程序。

类A订阅了类B的事件。类B对类A一无所知。

我不禁有这样的感觉,这是愚蠢的黑客的方式来做这件事,那么你怎么做正确?

比单个事件处理程序更好的事件来引发异步方法

切换到使用任务并行库而不是ThreadPool,它有很好的异常处理支持。

如何将类A中方法的"引用"注入类B而不给类B对类A的引用

您需要更新类B以接收函数作为构造函数参数或作为属性,例如

public class A
{
    public void MethodToCall(string args)
    {
        Console.WriteLine("I am class A - " + args);
    }
}
public class B
{
    public B(Action<string> action)
    {
        Method = action;
    }
    public Action<string> MethodToCall { get; private set; }
}
...
var a = new A();
var b = new B(a.MethodToCall);
a.MethodToCall("A"); // I am class A - A
b.MethodToCall("B"); // I am class A - B