如何在CancelAsync之后启动BackgroundWorker

时间:2011-07-27 08:59:51

标签: c# winforms user-controls backgroundworker

我正在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);
                }
            });

1 个答案:

答案 0 :(得分:1)

(按照评论中的说明:)

当你返回上一个用户控件时,它不会重新运行构造函数 - 所以如果你需要在那时重新初始化BackgroundWorker,你需要将初始化代码移动到一个可以运行的方法中在适当的时候。