多线程环境中Galasoft Messenger类的问题

时间:2013-05-21 04:17:55

标签: wpf mvvm mvvm-light messenger

我有两个类可以说是ClassA和ClassB。我必须在Galasoft Messenger课程的帮助下进行交流。在ClassA中,我有以下代码: -

A类:

Messenger.Default.Register<NotifyInterface>(this, PerformAction);

private void PerformAction(NotifyInterface objNotify)
{
   switch(objNotify.SomeProperty)
   {
    case "A":
       // Do Something
       break;
    case "B":
       // Do something else
       break;
    }
}

从ClassB我想在Messenger的帮助下发送并行通知,即我想并行执行'case A'和'case B'。我正在做这样的事情。

ClassB的:

System.Threading.ThreadPool.QueueUserWorkItem((object context) =>
        {
            Messenger.Default.Send<NotifyInterface>(objNotifyCaseA);                
        }, null);

Messenger.Default.Send<NotifyInterface>(objNotifyCaseB);

但第二个通知在第一个通知结束后才会收到。这是Messenger类的限制,无法并行发送两个通知吗?

1 个答案:

答案 0 :(得分:1)

嗯,不确定它是一个bug还是一个设计,但是肯定 - 在发送消息时信使锁(例如,如果你试图从另一个消息的处理程序中发送一条消息,你就会死了 - 锁)。

问题在mvvm light toolkit项目网站上进行了讨论,解决方案被提议为this拉取请求,但是尚未确认并合并到主干中。

作为临时解决方法,在发布新版本的工具包之前,您可以获取源并应用上述更改 - 这些将解决问题。