0

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

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

我尝试处理 backgroundworker 或 CancelAsync 但该方法仍在运行(我的应用程序是 Windows 窗体应用程序,所以我知道该方法仍在运行)。任何人都可以给我一个解决方案吗?太感谢了!

我的代码:

 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 后调用另一个方法发送记录。

4

3 回答 3

1

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

于 2012-12-12T03:54:56.097 回答
0

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

于 2012-12-12T03:59:37.853 回答
0
if(worker.IsBusy)
{
    worker.CancelAsync();
}
else
{
    worker.RunWorkerAsync();
}   
于 2012-12-12T04:08:44.707 回答