当我使用IMvxmessenger时,我得到一个异常,说明在mscorlib.dll中发生了'System.Exception'类型的异常,但是在用户代码WinRT信息中没有处理:应用程序调用了为不同线程编组的接口。附加信息:应用程序调用了一个为不同线程编组的接口。如果有这个异常的处理程序,程序可以安全地继续。
答案 0 :(得分:0)
根据您提问中的信息,很难添加许多真实的建议。
显然,您正在使用来自Messenger的消息来访问线程关键的内容。
MvvmCross和WinRT都提供了将方法调用编组到特定线程的方法 - 例如信使提供了几种不同的Subscribe
方法,允许您指定上下文 - 请参阅https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins#messenger
订阅邮件的三种不同选项的区别仅在于传回哪些线程邮件:
- 订阅 - 消息将直接在Publish线程上传递。这些订阅具有最低的处理开销 - 消息将始终在发布时同步接收。如果您已经知道将调用Publish的哪种类型的线程,并且您对消息处理程序的资源和UI使用情况有充分的了解,则应该使用此类订阅。
- SubscribeOnMainThread - 在后台线程上发布的任何消息都将被编组到主UI线程。如果您的消息处理程序需要执行一些涉及与UI交互的资源不密集的任务,那么这种类型的订阅是理想的。
- SubscribeOnThreadPoolThread - 消息将始终排队等待线程池处理。这总是涉及一个异步的帖子 - 即使消息是在现有的ThreadPool线程上发布的。如果您的消息处理程序需要执行一些资源密集型任务,因为它不会阻止UI,也不是消息发布者,这种类型的订阅是理想的。