如何在CancelAsync后启动BackgroundWorker

本文关键字:启动 BackgroundWorker CancelAsync | 更新日期: 2023-09-27 18:03:45

我在UserControls中使用backgroundworker,我通过单击按钮加载到面板中。我在一个UC中点击CancelAsync BW,然后我去另一个UC。当我想回到以前的UС(我已经取消了BW),我总是进入RunWorkerCompleted事件。

我已经尝试在UC构造函数中重新初始化BW:

bgrWorker = new BackgroundWorker
        {
            WorkerSupportsCancellation = true,
            WorkerReportsProgress = true
        };
        bgrWorker.DoWork += DoWork;
        bgrWorker.ProgressChanged += ProgressChanged;
        bgrWorker.RunWorkerCompleted += RunWorkerCompleted;
        btnStop.Click += StopWorker;

但是行不通。

DoWork事件代码:

System.Threading.Tasks.Parallel.For(0, _list.Count, num =>
            {
                if (bgrWorker.CancellationPending)
                {
                    e.Cancel = true;
                }
                else
                {
                    _splittedList.Add(FindMiddle.Find(_list[num], 20));
                    bgrWorker.ReportProgress(0);
                }
            });

如何在CancelAsync后启动BackgroundWorker

(如注释所示)

当您返回到前一个用户控件时,这将不会重新运行构造函数—因此,如果您需要在此时重新初始化BackgroundWorker,则需要将初始化代码移动到可以在适当时间运行的方法中。