如何从 .Net 5 Winforms 应用访问 Dispatcher
How to access Dispatcher from a .Net 5 Winforms app
如何在 .Net 5.0 应用程序中使用 class 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 Packages.
.
但是,似乎没有 WindowsBase Nuget 包。
https://www.nuget.org/packages?q=WindowsBase.
有一个名为 Microsoft.Windows.Compatibility 的软件包,根据其描述 sounds 应该包含 class;但事实并非如此。
https://www.nuget.org/packages/Microsoft.Windows.Compatibility/6.0.0-preview.5.21301.5
有什么建议吗?
限制:
- 该项目广泛使用 WinForms。将其转换为 WPF.
是不可行的
- 我之所以使用Dispatcher,是为了让不同线程上的对象可以调用修改UI。创建这些对象时 UI 不存在,因此将控件传递给它们不是一种选择(同样,对于业务对象了解按钮和其他东西,IMO 也不是很优雅)。
仔细看了一下,发现到今天(17/Jun/2021)Nuget包Microsoft.Windows.Compatibility还在预发布。这意味着当其他人阅读此主题时,class 可能已经包含在内。
如果没有,我找到了解决方法:
- 创建 WPF class 库
- 添加一个 DispatcherWrapper class
- 添加私有 Dispatcher 属性。
- 将所有(需要的)Dispatcher 方法添加到 DispatcherWrapper class
- 将项目引用从 WinForms 应用程序添加到 WPF 库。
- 使用 DispatcherWrapper class 而不是 Dispatcher。
但是,在阅读了 Jimi 的评论后,我认为,在处理 Winforms 应用程序时,使用 SynchronizationContext[=27 更优雅=] 而不是调度程序。
如何在 .Net 5.0 应用程序中使用 class 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 Packages.
但是,似乎没有 WindowsBase Nuget 包。
https://www.nuget.org/packages?q=WindowsBase.
有一个名为 Microsoft.Windows.Compatibility 的软件包,根据其描述 sounds 应该包含 class;但事实并非如此。
https://www.nuget.org/packages/Microsoft.Windows.Compatibility/6.0.0-preview.5.21301.5
有什么建议吗?
限制:
- 该项目广泛使用 WinForms。将其转换为 WPF. 是不可行的
- 我之所以使用Dispatcher,是为了让不同线程上的对象可以调用修改UI。创建这些对象时 UI 不存在,因此将控件传递给它们不是一种选择(同样,对于业务对象了解按钮和其他东西,IMO 也不是很优雅)。
仔细看了一下,发现到今天(17/Jun/2021)Nuget包Microsoft.Windows.Compatibility还在预发布。这意味着当其他人阅读此主题时,class 可能已经包含在内。
如果没有,我找到了解决方法:
- 创建 WPF class 库
- 添加一个 DispatcherWrapper class
- 添加私有 Dispatcher 属性。
- 将所有(需要的)Dispatcher 方法添加到 DispatcherWrapper class
- 将项目引用从 WinForms 应用程序添加到 WPF 库。
- 使用 DispatcherWrapper class 而不是 Dispatcher。
但是,在阅读了 Jimi 的评论后,我认为,在处理 Winforms 应用程序时,使用 SynchronizationContext[=27 更优雅=] 而不是调度程序。