是否可以在同一解决方案中将后台工作程序与单独的 class 库一起使用
Is it possible to use background worker with separate class libraries in the same solution
我一直在构建一个控制台应用程序,最近我决定将 WinForm GUI 粘贴到该应用程序上。这是在 Visual Studio 2015 年完成的(C# 6.0,.NET Framework 4.5.2)
我有以下项目布局
|-Solution
|-- GUI (Windows Application)
|-- DoStuff1 (Class Library)
|-- DoStuff2 (Class Library)
|-- DoStuff3 (Class Library)
|-- ConsoleApp1 (ConsoleApp)
|-- ConsoleApp2 (ConsoleApp)
|-- Helpers (Class Library)
现在的问题是,虽然它可以正常工作,但最终可能会花费大量时间进行处理,因此我开始考虑使用 BackgroundWorker,但是到目前为止,所有搜索都显示了如何在以下情况下使用它所有 processing/work 都在同一个 Windows 应用程序项目中完成,如果它们已经分开,则不会。
此外,我如何将 class 库中的进度报告回我的 GUI,这与 ReportProgress 有关,但不确定如何设置...
这可能吗,还是我需要将 class 库中的所有代码移动到 GUI 项目中?
是的,这绝对有可能。您需要添加对要使用的项目的引用,仅此而已。您可能需要考虑使用接口来描述您希望从两个项目中引用的类型。
由于您的项目配置为 .Net 4.5.2,您可以从 async
关键字中获益。
在项目类型上独立工作,因为它内置于框架中,支持进度变化通知和取消操作。
看看here
最好使用 Task.Run
将工作卸载到后台线程,因为它比 BackgroundWorker
更灵活,更容易与其他工作组合。
您可以使用 IProgress<T>
向 gui 报告进度,this blog post 显示了如何执行此操作的示例并将其与使用 BackgroundWorker
进行比较。
我一直在构建一个控制台应用程序,最近我决定将 WinForm GUI 粘贴到该应用程序上。这是在 Visual Studio 2015 年完成的(C# 6.0,.NET Framework 4.5.2)
我有以下项目布局
|-Solution
|-- GUI (Windows Application)
|-- DoStuff1 (Class Library)
|-- DoStuff2 (Class Library)
|-- DoStuff3 (Class Library)
|-- ConsoleApp1 (ConsoleApp)
|-- ConsoleApp2 (ConsoleApp)
|-- Helpers (Class Library)
现在的问题是,虽然它可以正常工作,但最终可能会花费大量时间进行处理,因此我开始考虑使用 BackgroundWorker,但是到目前为止,所有搜索都显示了如何在以下情况下使用它所有 processing/work 都在同一个 Windows 应用程序项目中完成,如果它们已经分开,则不会。
此外,我如何将 class 库中的进度报告回我的 GUI,这与 ReportProgress 有关,但不确定如何设置...
这可能吗,还是我需要将 class 库中的所有代码移动到 GUI 项目中?
是的,这绝对有可能。您需要添加对要使用的项目的引用,仅此而已。您可能需要考虑使用接口来描述您希望从两个项目中引用的类型。
由于您的项目配置为 .Net 4.5.2,您可以从 async
关键字中获益。
在项目类型上独立工作,因为它内置于框架中,支持进度变化通知和取消操作。
看看here
最好使用 Task.Run
将工作卸载到后台线程,因为它比 BackgroundWorker
更灵活,更容易与其他工作组合。
您可以使用 IProgress<T>
向 gui 报告进度,this blog post 显示了如何执行此操作的示例并将其与使用 BackgroundWorker
进行比较。