我的应用程序连接到SQL数据库,从表中返回所有行,然后遍历每行并执行一些处理。
如果这是图形形式的Forms应用程序,我会考虑在BackgroundWorker中进行上述操作,以使UI不会被抬起,并在BackgroundWorker中报告进度或支持取消操作。
由于我可能在许多应用程序中执行相同/相似的操作,因此我想将SQL工作打包到类库中,并从其他应用程序中调用它。
我知道我也可以在类库中使用BackgroundWorkers,但是如何将UI和调用链接到该库?我如何仍然可以发送取消请求,或报告进度备份?还是这根本不是正确的路线?
答案 0 :(得分:2)
虽然您可以在类库中使用BackgroundWorker
,但感觉很奇怪,因为它主要是作为UI的补充组件而设计的。您也可以直接管理线程,但是无论哪种方式,您仍然需要提出某种方式来交流进度并允许取消。虽然您显然可以自由地为此创建自己的模式,但是基本上有three standard patterns for .NET。
除非您确实需要IAsyncResult
的较低级别控制,否则这些天每个人都在使用的最流行的模式是TAP(任务/异步/等待)。使用TAP时,有一种提供进度和取消的标准方法。有关这两个主题的更多信息,请参见official documentation(该主题的文档中都有相应的部分)。