【发布时间】:2012-10-16 16:52:54
【问题描述】:
我有一个 B 类(INotifyPropertyChanged 的实现)来监视事件。它位于接收事件通知的 A 类中。 B 类生成的事件通常非常频繁,所以我想:
在线程 ThA 上运行类 A 的代码(不与包含类 B 交互)
在线程 ThB 上运行类 B 的代码,当事件发生时,在通知包含事件的类 A 之前(通过调用 ThA 的调度程序?),它检查 ThA 是否不被 A 类使用。这样,我会保留它,以便只有 ThA 在 A 内运行,并且还避免来自 B 类的通知压倒 ThA(来自 B 类的信息将“仅在 ThA 有时间时”为 A 类创建事件)。
所以它可能看起来像这样 -
public class A
{
private B b
private Thread ThA
public A
{
b= new B(ThA);
b.PropertyChanged+=..
}
Event1 callback running on ThA
Event2 callback running on ThA
Callback for b (invoked in ThA)
}
public class B : INotifyPropertyChanged
{
private Thread ThA
private Thread ThB
public B(ThA_)
{
ThA=ThA_;
}
private void EventInClassB_Updated(object sender, Args e)
{
if (ThA is not being used for anything)
{
DispatcherForThreadA.invoke( notifyPropertyChanged() ); //send the callback to class A
}
}
}
有谁知道是否有更聪明的方法可以做到这一点,如果没有,我该如何编码“ThA 没有被用于任何事情”?
谢谢! 克里斯
【问题讨论】:
-
顺便说一句,在构造函数中替换事件在多线程环境中是 BAD 的事情:您将非构造对象暴露给外部世界,外部世界可以同时使用它!
标签: c# multithreading events