如何取消或替换忙于执行SQL调用的后台工作者?

时间:2019-07-11 15:50:02

标签: c# wpf backgroundworker

因此,我的后台工作人员开始了,并调用数据库以获取数据(取决于所存储的数据量可能比正常情况多花几秒钟)。例如,如果在此数据通话期间整体上下文发生了变化,例如说我当前正在加载足球运动员的完整列表,并且此加载需要10秒才能完成,但是现在我单击了UI仅显示人员,然后单击后台人员“休息”,并说它很忙。

目前,我一直在阻止用户更改UI的上下文,直到它完成SQL加载为止,这是已解决的问题,但我觉得应该做得更好。

我已经研究了取消后台工作程序,但这又有点用处,因为该工作程序仍在忙于运行SQL以便取消它。

我也试图创建一个新的worker实例,并且可以正常工作,但是实际上它只是为新worker运行创建了另一个线程。例如,工作人员开始加载玩家列表,用户将上下文更改为人员,加载人员列表,然后加载玩家列表,这将覆盖人员列表。

if (loader.IsBusy)
{
    loader = new BackgroundWorker();
    loader.WorkerReportsProgress = true;
    loader.DoWork += CompanyIDChanged;
    loader.ProgressChanged += Loader_ProgressChanged;
    loader.RunWorkerCompleted += Loader_RunWorkerCompleted;
}

loader.RunWorkerAsync();

这就是我目前“替换”工作人员的方式。

我想发生的结果如下。

  1. 工作人员开始加载玩家列表
  2. 用户界面已更改,以便他们现在想要工作人员
  3. 工人基本上处于任何状态
  4. 该工作程序然后使用新的上下文再次运行

后台工作者是否适合这种情况?有更好的使用方法吗?还是我看错了,需要重新考虑我在做什么?

0 个答案:

没有答案