【问题标题】:Issues with Galasoft Messenger class in multi threaded environment多线程环境中 Galasoft Messenger 类的问题
【发布时间】:2013-05-21 04:17:54
【问题描述】:

我有两个班级,比如说 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;
    }
}

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

B 类:

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

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

但是直到第一个通知结束后才收到第二个通知。这是 Messenger 类不能同时发送两个通知的限制吗?

【问题讨论】:

    标签: wpf mvvm mvvm-light messenger


    【解决方案1】:

    好吧,不确定这是错误还是设计使然,但是是的 - 发送消息时信使锁定(例如,如果您尝试从另一个消息的处理程序中发送消息,您将得到一个死 -锁)。

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 2014-01-20
      • 2011-03-07
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多