Как запустить BackgroundWorker после CancelAsync - PullRequest
0 голосов
/ 27 июля 2011

Я использую backgroundworker в UserControls, который я загружаю в панели нажатием кнопки. Я нажимаю CancelAsync BW в одном UC, затем я иду в другой UC. Когда я хочу вернуться к предыдущему UС (где я отменил BW), я всегда вхожу в событие RunWorkerCompleted.

Я попытался повторно инициализировать BW в конструкторе UC:

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 Ответ

1 голос
/ 27 июля 2011

(как указано в комментариях:)

Когда вы вернетесь к предыдущему пользовательскому элементу управления, конструктор не будет перезапущен - поэтому, если вам нужно повторно инициализировать BackgroundWorker в этот момент, вам нужно переместить код инициализации в метод, который можно запустить на подходящее время.

...