首页 > 解决方案 > 取消正在进行密集操作的后台工作人员

问题描述

我有一个带有 2 个网格的 winform,我有一个后台工作人员,用于从我们的数据库中检索大量数据。当用户从左侧网格更改行时,后台工作程序启动(它将行作为 SQL 过程的参数),一旦完成,数据表将与右侧网格的绑定源合并并显示信息。

这是我的代码:

// Called when left grid focused row changes
public void LaunchTransactionWorker(int rowId)
{
    if (!backgroundWorker.IsBusy)
    {
        backgroundWorker.RunWorkerAsync(rowId);
    }
}

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    e.Result = tableAdapterLog.GetData((int)e.Argument);
}

private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    var dataTable = (ds.DataTableTransactionsLog)e.Result;

    if (dataTable != null)
    {
        ds.DataTableLog.Clear();
        ds.DataTableLog.Merge(dataTable);
    }
}

如您所见,我的DoWork函数只做一件事。据我了解(我可能错了),后台工作人员启动了一个执行该DoWork功能的新线程。在那里我可以查看取消标志是否被抬起并停止它。但是我怎么能阻止它,如果它会很忙Fill呢?如果我添加支票if (backgroundWorker.CancellationPending) e.Cancel = true; ,它永远不会达到否?

标签: c#backgroundworker

解决方案


推荐阅读