【发布时间】:2013-01-10 20:09:36
【问题描述】:
目前调用线程池上的方法并且如果有任何异常仍然会得到异常我正在使用带有单个事件处理程序的事件并使用BeginInvoke()调用事件处理程序。
A 类从 B 类订阅事件。B 类对 A 类一无所知。
我不禁觉得这是一种愚蠢的 hacky 方式,那么你如何正确地做到这一点?
【问题讨论】:
标签: c# multithreading
目前调用线程池上的方法并且如果有任何异常仍然会得到异常我正在使用带有单个事件处理程序的事件并使用BeginInvoke()调用事件处理程序。
A 类从 B 类订阅事件。B 类对 A 类一无所知。
我不禁觉得这是一种愚蠢的 hacky 方式,那么你如何正确地做到这一点?
【问题讨论】:
标签: c# multithreading
切换到使用Task Parallel Library 而不是ThreadPool,它有很好的exception handling 支持。
如何在不向 B 类提供对 A 类的引用的情况下将 A 类中的方法的“引用”注入 B 类
您需要更新类 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
【讨论】:
MethodToCall(string arg),但我不想给 B 类引用 A 类,只引用 ClassA.MethodToCall(string args)
Action 不是 LINQ 吗?你知道这完全是出于兴趣,在 LINQ 之前的 .NET 版本中是如何编写的。