因此,我的后台工作人员开始了,并调用数据库以获取数据(取决于所存储的数据量可能比正常情况多花几秒钟)。例如,如果在此数据通话期间整体上下文发生了变化,例如说我当前正在加载足球运动员的完整列表,并且此加载需要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();
这就是我目前“替换”工作人员的方式。
我想发生的结果如下。
后台工作者是否适合这种情况?有更好的使用方法吗?还是我看错了,需要重新考虑我在做什么?