是否可以在同一解决方案中将后台工作程序与单独的 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 进行比较。