在我的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());
答案 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
。