如何停止Backgroundworker调用的方法?

时间:2012-12-12 03:47:51

标签: c# multithreading backgroundworker

我有一名背景工作者。当它启动时,调用一个方法将记录从数据库发送到另一个Web服务。

问题是我做了一个停止按钮来停止发送作业,但它没有用。

我尝试处理backgroundworker或CancelAsync但该方法仍在运行(我的应用程序是一个Windows窗体应用程序,所以我知道该方法仍在运行)。有人可以给我一个解决方案吗? Tks这么多!

我的代码:

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Send();
        }

停止按钮

private void btnStop_Click(object sender, EventArgs e)
        {            
            try
            {
               backgroundWorker1.CancelAsync();   
               backgroundWorker1.Dispose();                                
            }
            catch (Exception ex)
            {
                Global._logger.Info(ex.Message + ex.Source);
                ShowError(ex.Message);
            }

        }

注意:方法Send()将在检查DB后调用另一个发送记录的方法。

3 个答案:

答案 0 :(得分:1)

这完全取决于Send正在做什么。您需要将BackgroundWorker实例传递给此方法并检查CancellationPending属性(在调用CancelAync后设置)。如果Send正在使用某种异步帖子,甚至是批量帖子,您将无法取消它。你必须能够在某个时刻检查这个属性,以阻止你正在做的事情。

答案 1 :(得分:0)

好吧,我发现了:)我不需要对backgroundworker做任何事情只需处理它并创建一个全局变量作为标志来终止方法中的循环方法Send()调用

答案 2 :(得分:0)

if(worker.IsBusy)
{
    worker.CancelAsync();
}
else
{
    worker.RunWorkerAsync();
}