【发布时间】:2021-06-17 17:56:06
【问题描述】:
如何在 .Net 5.0 应用程序中使用 System.Windows.Threading.Dispatcher 类?
根据在线文档,它应该可用。
https://docs.microsoft.com/en-us/dotnet/api/system.windows.threading.dispatcher?view=net-5.0。
通常,在 .Net Framework 应用程序中,我只会添加对程序集 WindowsBase.dll 的引用。但由于我使用的是 .Net 5.0 项目,我只能参考 Nuget 包。
Cannot add assemblies to .Net Core application in Visual Studio 2019。
但是,似乎没有 WindowsBase Nuget 包。
https://www.nuget.org/packages?q=WindowsBase。
有一个名为 Microsoft.Windows.Compatibility 的包,根据其描述听起来,它应该包含该类;但事实并非如此。
https://www.nuget.org/packages/Microsoft.Windows.Compatibility/6.0.0-preview.5.21301.5
有什么建议吗?
限制:
- 该项目广泛使用WinForms。将其转换为 WPF 是不可行的。
- 我之所以使用 Dispatcher,是为了让不同线程上的对象可以调用对 UI 的修改。创建这些对象时 UI 不存在,因此无法将控件传递给它们(此外,对于业务对象了解按钮和内容的 IMO 也不是很优雅)。
【问题讨论】:
-
您可以使用Progress<T> 代表。或SynchronizationContext.Post()。或者使用 async/await 模式,当可用时(或当你使其可用时)。还有其他同步方法。您不需要 WinForms 中的 WPF Dispatcher。
-
听起来是个好主意。谢谢,吉米。
标签: winforms .net-5 dispatcher .net-framework-version