在WPF中, 所有的控件都继承自DispatcherObject,获取Dispatcher非常容易。
如何在WinUI 3 Windows App SDK中获取DispatcherQueue并在ViewModel中使用它?
编辑我的实现方法,在mm8最受欢迎的答案上进行扩展。
在我的ViewModel中创建一个属性:
注意:我并没有把这个作为答案发布,因为已经有了一个答案。这是我的实现,旨在帮助任何对此感兴趣的人。
如何在WinUI 3 Windows App SDK中获取DispatcherQueue并在ViewModel中使用它?
编辑我的实现方法,在mm8最受欢迎的答案上进行扩展。
在我的ViewModel中创建一个属性:
public Microsoft.UI.Dispatching.DispatcherQueue TheDispatcher { get; set; }
然后在MainPage.xaml.cs的代码后台MainPage_Loaded
事件中获取dispatcher
ViewModel.TheDispatcher = this.DispatcherQueue;
现在我在VM中拥有了dispatcher,所以从VM中使用很容易:TheDispatcher.TryEnqueue(() =>
{
// some ui thread work
});
注意:我并没有把这个作为答案发布,因为已经有了一个答案。这是我的实现,旨在帮助任何对此感兴趣的人。
DispatcherQueue.TryEnqueue(() => { 你的代码 });
和Task.Run(()=>{ 你的代码 });
?假设我有一个包含1000个视图模型的循环,并且我在每个视图模型上调用. public async Task DoWork()
,我可以通过循环遍历它们并只执行vm.DoWork();
(不带await),或者使用dispatcherQueue.TryEnqueue(async () => { await vm.DoWork(); });
。哪种方式更好?为什么?假设DoWork()执行一些耗时的工作,然后更新一个调用OnPropertyChanged()的属性。 - IronHide