vb.net - 在类库中运行长时间操作并报告进度
问题描述
我的应用程序连接到 SQL 数据库,从表中返回所有行,然后遍历每一行并执行一些处理。
如果这是一个图形表单应用程序,我会考虑在 BackgroundWorker 中执行上述操作,以便 UI 不会被阻止,并在 BackgroundWorker 中报告进度或支持取消。
由于我可能在许多应用程序中执行相同/相似的操作,我想将 SQL 工作打包到一个类库中并从我的其他应用程序中调用它。
我知道我也可以在类库中使用 BackgroundWorkers,但是如何链接 UI 和对库的调用?我怎样才能仍然发送取消请求,或报告进度备份?或者这根本不是正确的路线?
解决方案
虽然您可以BackgroundWorker
在类库中使用,但感觉它的用途很奇怪,因为它主要被设计为 UI 的补充组件。您也可以直接管理线程,但无论哪种方式,您仍然需要想出一些方法来传达进度并允许取消。虽然您显然可以自由地为此创建自己的模式,但.NET 基本上有三种标准模式。
除非您真的需要较低级别的控制,否则现在IAsyncResult
每个人都在使用的最流行的模式是 TAP(任务/异步/等待)。使用 TAP 时,有一种提供进度和取消的标准方法。有关这两个主题的更多信息,请参阅官方文档(该文档中包含这两个主题的部分)。
推荐阅读
- highcharts - Highcharts - 如果条形图上没有足够的空间,则更改文本颜色
- python - 如何根据访问频率将回访用户分类到不同的时间段
- docker - 通过 docker 镜像安装 jfrog 容器注册表的问题
- azure-active-directory - 通过订阅获取 Azure 应用程序
- r - 在 geom_point() 图上绘制 geom_arc()
- python - 使用 sqlalchemy 将 pandas 数据帧复制到 postgresql 会导致 502 bad gateway 错误
- vue.js - 如何在 Vue Composition API 中使用 ref 验证表单
- sql - 选择查询的默认行
- json - 将 Packer 1.6 vsphere-iso 配置代码从 JSON 转换为 HCL2
- cordova - 如何在没有新构建的情况下切换 Ionic 环境