.NET 6中如何更新UI线程?求替代.NET 4.x Dispatcher的方案
.NET 6中WPF/UWP的UI线程调度方法
WPF场景
在.NET 6的WPF项目中,Dispatcher依然保留,用法和.NET 4.x基本一致:
- 全局获取UI线程Dispatcher并执行同步操作:
App.Current.Dispatcher.Invoke(() => { Messages += $"{message}{Environment.NewLine}"; });
- 若处于控件上下文内,可直接通过控件的
Dispatcher属性调用:
myControl.Dispatcher.Invoke(() => { Messages += $"{message}{Environment.NewLine}"; });
- 推荐使用异步版本避免阻塞线程:
await App.Current.Dispatcher.InvokeAsync(() => { Messages += $"{message}{Environment.NewLine}"; });
UWP/WinUI 3场景
.NET 6中UWP或WinUI 3不再使用传统Dispatcher,转而用DispatcherQueue调度UI线程操作:
- 获取当前UI线程的DispatcherQueue:
var dispatcherQueue = DispatcherQueue.GetForCurrentThread();
- 调度操作到UI线程:
dispatcherQueue.TryEnqueue(() => { Messages += $"{message}{Environment.NewLine}"; });
- 控件上下文内可直接使用控件的
DispatcherQueue属性:
myTextBox.DispatcherQueue.TryEnqueue(() => { Messages += $"{message}{Environment.NewLine}"; });
补充说明
WinUI 3项目需确保引用Microsoft.UI.Xaml命名空间;WPF项目无需额外引用,Dispatcher属于System.Windows.Threading命名空间。
内容的提问来源于stack exchange,提问作者Russ_S
相关产品推荐
相关产品推荐

