首页 > 解决方案 > 在类库中运行长时间操作并报告进度

问题描述

我的应用程序连接到 SQL 数据库,从表中返回所有行,然后遍历每一行并执行一些处理。

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

由于我可能在许多应用程序中执行相同/相似的操作,我想将 SQL 工作打包到一个类库中并从我的其他应用程序中调用它。

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

标签: vb.netbackgroundworker

解决方案


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

除非您真的需要较低级别的控制,否则现在IAsyncResult每个人都在使用的最流行的模式是 TAP(任务/异步/等待)。使用 TAP 时,有一种提供进度和取消的标准方法。有关这两个主题的更多信息,请参阅官方文档(该文档中包含这两个主题的部分)。


推荐阅读