我有一个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未被用于任何东西”?

    谢谢!
    克里斯

    最佳答案

    您可以使用MonitorMutex来控制对ThA的访问。只需调用Monitor.TryEnter即可获得锁。如果TryEnter失败,则使用ThA。 ThA完成后,请确保调用Monitor.Exit

    使用Mutex的代码将是相似的。通常,Monitor的性能会更好,但不能跨应用程序域边界使用。

    09-25 21:11