如何在跑步时停止背景工作

时间:2011-05-24 06:57:02

标签: c#

我是新锐的。 我创建了一个Windows窗体应用程序。 我的申请工作正常。 我想在运行时取消BackgroundWorker。我的意思是我想完全停止BackgroundWorker流程。 我正在使用此代码取消该应用程序, 1)首先我用了

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {

        this.Dispose();
    }

但它并没有停止。然后我用了

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
        bgBackfill1.CancelAsync();
        this.Dispose();
    }

但是当我退出应用程序时,它会将文件写入G:\ Drive。 任何人都可以请我说如何停止在G:\ Drive中写入文件并完全停止BackgroundWorker流程。

谢谢,如果有人帮助我。

4 个答案:

答案 0 :(得分:5)

Backgroundworkers工人方法必须知道有取消待处理,所以只有它才能取消。

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;

    for (int i = 1; (i <= 10); i++)
    {
        if ((worker.CancellationPending == true))
        {
            e.Cancel = true;
            break;
        }
        else
        {
            // Perform a time consuming operation and report progress.
            System.Threading.Thread.Sleep(500);
            worker.ReportProgress((i * 10));
        }
    }
}

因此,当您设置CancelAsync时,您可以设置Cancellation pending。但是您还需要为该属性注意DoWork方法 - 尽快取消工作。请参阅MSDN上的示例。

答案 1 :(得分:3)

在你的“DoWork”例程中,你可以使用worker1.CancellationPending检查工作线程(让我们称之为worker1),如果它是真的,那么如果你在你的itterative代码中测试它,那么它试图被取消显然停止继续处理,并在最后设置e.Cancel = true,您将成功检查并处理取消后台工作人员。

答案 2 :(得分:1)

您的Backgroundworker必须编程为可取消。首先将工人设置为可取消:

 var bg= new BackgroundWorker();
 bg.WorkerSupportsCancellation = true;

然后在你的工作循环中检查CancellationPending类的BackgroundWorker标志,看看你应该何时退出循环。

答案 3 :(得分:1)

初始化BackgroundWorker组件时,以及拨打RunWorkerAsync之前,您必须设置WorkerSupportsCancellation属性。所以,例如:

MyWorker = new BackgroundWorker();
MyWorker.WorkerSupportsCancellation = true;
MyWorker.WorkerReportsProgress = true;
MyWorker.DoWork += DoWorkEventHandler;
MyWorker.ProgressChanged += WorkerProgressChanged;
MyWorker.RunWorkerAsync();