跑步时如何停止背景工

问题描述

| 我是夏普新手。 我创建了一个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进程。 谢谢有人帮助我。     

解决方法

Backgroundworkers worker方法必须知道有未决的取消,因此只有这样才能取消。
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时,您将取消取消设置为待处理。但是您还需要在DoWork方法中对该属性进行注意-尽快取消作业。请参阅MSDN上的示例。     ,在您的“ DoWork”例程中,您可以使用worker1.CancellationPending检查工作线程(将其称为worker1),如果为true,则尝试将其取消,如果您在内部明显的代码中对此进行了测试,停止继续处理,并在最后设置e.Cancel = true,您将成功检查并处理了后台工作的取消。     ,必须将Backgroundworker编程为可取消的。首先设置工人可取消:
 var bg= new BackgroundWorker();
 bg.WorkerSupportsCancellation = true;
然后在worker循环中检查check5ѭ类的
CancellationPending
标志,以查看何时应退出循环。     ,在初始化
BackgroundWorker
组件时以及调用
RunWorkerAsync
之前,必须设置WorkerSupportsCancellation属性。因此,例如:
MyWorker = new BackgroundWorker();
MyWorker.WorkerSupportsCancellation = true;
MyWorker.WorkerReportsProgress = true;
MyWorker.DoWork += DoWorkEventHandler;
MyWorker.ProgressChanged += WorkerProgressChanged;
MyWorker.RunWorkerAsync();
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...