我有一个用于监视事件的 B 类(INotifyPropertyChanged 的实现)。它位于接收事件通知的 A 类内部。 B 类生成的事件通常非常频繁,所以我想:
在线程 ThA 上运行类 A 的代码(不与包含类 B 交互)
在线程 ThB 上运行类 B 的代码,当事件发生时,在通知包含该事件的类 A 之前(通过对 ThA 的调度程序进行调用?),它会检查 ThA 是否为这样,我会保留它,以便只有 ThA 在 A 内部运行,并且还避免来自 B 类的通知淹没 ThA(来自 B 类的信息将为 A 类创建“仅当 ThA 有时间时”的事件) )。
所以它可能看起来像这样 -
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 没有被用于任何用途”?
谢谢! 克里斯
最佳答案
您可以使用 Monitor或Mutex控制对 ThA 的访问。只需调用 Monitor.TryEnter
即可获取锁定。如果 TryEnter
失败,则 ThA 正在使用中。确保在 ThA 完成后调用 Monitor.Exit
。
使用Mutex
的代码是类似的。一般来说,Monitor
的性能会更好,但它不能跨应用域边界使用。
关于c# - C# 中的线程事件回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919685/