使用Messages时出现线程异常

时间:2014-11-03 10:01:52

标签: c# multithreading mvvm notifications messages

在我的ViewModel构造函数中的Windows Phone应用程序中,我注册了一个这样的信使:

Messenger.Default.Register<MyType>
(
    this,
    (action) => ReceiveMessage(action)
);

然后在ReceiveMessage中,我尝试放置一些代码,然后用

崩溃
"The application called an interface that was marshalled for a different thread."

private void ReceiveMessage(MyType action)
{
    this.MyCollection.Clear();

    foreach (Student st in Students)
    {
        this.MyCollection.Add(st);
    }
}

我尝试过这样做,结果相同:

Application.Current.Resources.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => this.MyCollection.Clear());

1 个答案:

答案 0 :(得分:0)

您需要在已注册的处理程序中调用Dispatcher.RunAsync(),以便调用对ReceiveMessage()的整个调用,而不仅仅调用该方法的一个语句。

Messenger.Default.Register<MyType>
(
    this,
    (action) => Application.Current.Resources.Dispatcher.RunAsync(
        CoreDispatcherPriority.Normal, () => ReceiveMessage(action))
);

当然,将ReceiveMessage()方法更改回原来的方式(没有调度程序调用)。

另外,我不相信资源中的Dispatcher是正确的;它肯定不是我在WinRT中完成它的方式。也许这是电话的事情,但如果上述情况仍然无效,请尝试使用Application.Current.Dispatcher