运行 在 class 库中进行长时间操作并报告进度

Running long operations in a class library and reporting progress back

我的应用程序连接到 SQL 数据库,returns 来自 table 的所有行,然后遍历每一行并执行一些处理。

如果这是一个图形表单应用程序,我会考虑在 BackgroundWorker 中执行上述操作,这样 UI 就不会被阻止,并在 BackgroundWorker 中报告进度或支持取消。

因为我可能在许多应用程序中执行 same/similar 操作,所以我想将 SQL 工作打包到 class 库中并从我的其他应用程序中调用它。

我知道我也可以在 class 库中使用 BackgroundWorkers,但是我如何 link UI 和对库的调用?我如何仍然可以发送取消请求或报告进度?或者这根本不是正确的路线?

虽然您可以在 class 库中使用 BackgroundWorker,但感觉它的用法很奇怪,因为它主要设计为 UI 的补充组件。您也可以直接管理线程,但无论哪种方式,您仍然需要想出一些方法来传达进度并允许取消。虽然您显然可以自由地为此创建自己的模式,但基本上 three standard patterns for .NET.

除非您真的需要 IAsyncResult 的较低级别控制,否则最近每个人都在使用的最流行的模式是 TAP (Task/Async/Await)。使用 TAP 时,有一种标准方法来提供进度和取消。有关这两个主题的更多信息,请参阅 official documentation(该文档中有针对这两个主题的部分)。