2

我有一个监视事件的 B 类(INotifyPropertyChanged 的​​实现)。它位于接收事件通知的 A 类中。B 类生成的事件通常非常频繁,所以我想:

  1. 在线程 ThA 上运行类 A 的代码(不与包含类 B 交互)

  2. 在线程 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 没有被用于任何事情”?

谢谢!克里斯

4

1 回答 1

2

您可以使用MonitorMutex来控制对 ThA 的访问。只需调用Monitor.TryEnter即可获得锁。如果TryEnter失败,则 ThA 正在使用中。一定要Monitor.Exit在 ThA 完成后打电话。

使用 a 的代码Mutex类似。一般来说,Monitor性能会更好,但它不能跨应用程序域边界使用。

于 2012-10-16T16:59:26.547 回答