尝试更新ViewModel中的Ui属性时DispatcherQueue为空
本文介绍了尝试更新ViewModel中的Ui属性时DispatcherQueue为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在桌面应用程序的WinUI 3中,我有一个要更新的属性,该属性通过x:Bind
绑定到该UI。
我希望像在WPF中一样使用Dispatcher
进入UI线程,并避免在更新道具时IM遇到的线程错误:
System.Runtime.InteropServices.COMException: 'The application called an interface that was marshalled for a different thread. (0x8001010E (RPC_E_WRONG_THREAD))'
我只是不确定在WinUI3中如何操作,当我尝试时
我收到此错误
DispatcherQueue.GetForCurrentThread()
为空
我也试过了:
但无法编译:
然后我发现thisGitHub问题,所以我尝试:
这是可行的,但为什么我无法在我的VM中使用调度程序进入UI线程?
推荐答案
DispatcherQueue.GetForCurrentThread()
在实际具有DispatcherQueue
的线程上调用时只返回DispatcherQueue
。如果在后台线程上调用它,则确实没有要返回的DispatcherQueue
。
所以诀窍是调用UI线程上的方法,并将返回值存储在一个变量中,然后从后台线程使用该变量,例如:
这篇关于尝试更新ViewModel中的Ui属性时DispatcherQueue为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!