WPF+C#开发中无法使用System.Windows.Threading的问题求助
WPF中System.Windows.Threading命名空间引用问题及替代方案
一、正确添加WindowsBase.dll引用的步骤
你找错位置了,WindowsBase.dll不是COM引用,而是.NET框架程序集:
- 在Visual Studio解决方案资源管理器里右键点击项目 → 选择「添加」→「引用」
- 打开「引用管理器」后,切换到「程序集」→「框架」标签(如果是.NET Core/.NET 5+的WPF项目,这个引用默认已包含,无需手动添加;要是找不到该引用,可能是你误建了非WPF类型的项目,比如控制台项目)
- 找到并勾选
WindowsBase,点击确定后就能正常使用System.Windows.Threading命名空间
二、是否必须使用Dispatcher?
不是必须的,Dispatcher只是WPF中跨线程更新UI的标准方式之一,还有不少更灵活的替代方案。
三、替代方案
- 直接调用
Application.Current.Dispatcher:WPF项目默认可访问这个静态属性,无需额外引用,直接用它的Invoke或BeginInvoke方法更新UI - 借助UI控件自身的Dispatcher:所有WPF控件都继承自
DispatcherObject,比如可以直接写:myBattleLabel.Dispatcher.Invoke(() => { myBattleLabel.Content = "敌方血量-10"; }); - .NET 6+使用
DispatcherQueue:更轻量的替代方案,同样属于System.Windows.Threading命名空间,用法示例:DispatcherQueue.Current.TryEnqueue(() => { // 此处编写UI更新逻辑 }); - MVVM绑定自动处理:如果采用MVVM模式,实现
INotifyPropertyChanged接口或使用ObservableCollection,只要正确触发属性变更通知,UI会自动响应更新(部分MVVM框架自带线程安全的属性变更实现,无需手动处理Dispatcher)
内容的提问来源于stack exchange,提问作者Ben Johnson
相关产品推荐
相关产品推荐

