比使用单个事件处理程序的事件更好的东西,用于引发异步方法

时间:2013-01-10 11:12:59

标签: c# multithreading

目前在线程池上调用一个方法,如果我正在使用带有单个事件处理程序的事件并使用BeginInvoke()调用事件处理程序,则仍然会获得异常。

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

我情不自禁地觉得这是一种愚蠢的黑客行为方式,所以你怎么做呢?

1 个答案:

答案 0 :(得分:2)

切换为使用Task Parallel Library代替ThreadPool,它有很好的exception handling支持。

  

如何将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