C#中使用线程进行事件回调

时间:2012-10-16 16:52:55

标签: c# multithreading events

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

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

  2. 在线程ThB上运行B类的代码,当事件发生时,在通知事件的包含类A之前(通过对ThA的调度程序进行调用?),它会检查ThA是否为这样,我会保留它,以便只有ThA在A内部运行,并且还避免使用来自B类的通知压倒ThA(来自B类的信息将为A类创建事件“仅当ThA有时间时” )。

  3. 所以它可能看起来像这样 -

    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没有被用于任何东西”?

    谢谢! 克里斯

1 个答案:

答案 0 :(得分:2)

您可以使用MonitorMutex来控制对ThA的访问。只需致电Monitor.TryEnter即可获得锁定。如果TryEnter失败,则ThA正在使用中。当ThA完成时,请务必致电Monitor.Exit

使用Mutex的代码类似。通常,Monitor的效果会更好,但不能跨应用域边界使用。