是否可以在同一解决方案中使用具有单独类库的后台工作程序

时间:2016-03-31 20:59:50

标签: c# winforms backgroundworker .net-framework-version

我一直在构建一个控制台应用程序,我最近决定坚持使用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,但到目前为止所有搜索都显示了如何在所有处理时使用它/ work正在同一个Windows应用程序项目中完成,而不是它们已经分离。

另外,我如何将我的类库中的进度报告回我的GUI,这与ReportProgress有关,但不确定如何设置...

这是可能的,还是我需要将类库中的所有代码移动到GUI项目中?

3 个答案:

答案 0 :(得分:2)

最好使用Task.Run将工作卸载到后台线程,因为它比BackgroundWorker更灵活,更容易与其他工作一起构建。

您可以使用IProgress<T>向gui报告进度,this blog post显示了如何执行此操作并将其与使用BackgroundWorker进行比较的示例。

答案 1 :(得分:1)

是的,这绝对可能。您需要添加对要使用的项目的引用,即所有项目。您可能需要考虑使用接口来描述要从两个项目中引用的类型。

答案 2 :(得分:0)

由于您的项目配置为.Net 4.5.2,因此您可以从async关键字中受益。

它独立于项目类型,因为它内置于框架中,并支持进度更改通知程序和取消操作。

看看here