Приостановить Backgroundworker, пока пользователь не подтвердит отмену - PullRequest
0 голосов
/ 30 августа 2018

Я загружаю файл Excel в базу данных. Ниже приведены шаги: 1. У меня есть данные Excel в ExcelRawData (DataTable) 2. UploadProgress - это ПрогрессБар

            int insertWkSuccess = 0;
            bool wait = true;
            int progress = 0;
            uploadProgress.Visible = lblPercent.Visible = true;
            btnCancel.Text = "Cancel Upload";
            uploadProgress.Value = 0;
            uploadProgress.Maximum = excelRawData.Rows.Count;
            _workerUpload = null;
            _workerUpload = new BackgroundWorker();
            rtxtError.AppendText("Uploading Sheet Data.........\n");
            _workerUpload.DoWork += (obj, args) =>
            {
                foreach (DataRow row in excelRawData.Rows)
                {
                    if (wait)
                    {
                        if (_workerUpload.CancellationPending)
                        {
                            args.Cancel = true;
                            args.Result = null;
                            return;
                        }

                        if (upload.Upload(row, excelRawData.Rows.IndexOf(row) + 1, country, company, version, ref errorMsg))
                            insertWkSuccess++;
                        progress++;
                        if (_workerUpload == null)
                        {
                            break;
                        }
                        _workerUpload.ReportProgress(progress);
                        setPercentValue((progress*100)/uploadProgress.Maximum);
                    }
                    if (errorMsg.Count() == 0 && insertWkSuccess > 0)
                    {
                        upload.insertWktoMain(version, country, ref errorMsg);
                    }
                    args.Result = new object[] { insertWkSuccess, company, selectedSheet };
                }
            };
            _workerUpload.ProgressChanged+=_workerUpload_ProgressChanged;
            _workerUpload.RunWorkerCompleted+=_workerUpload_RunWorkerCompleted;
            _workerUpload.WorkerReportsProgress = true;
            _workerUpload.WorkerSupportsCancellation = true;
            _workerUpload.RunWorkerAsync();

Ниже мое нажатие кнопки «Кодирование для отмены».

     if (_workerUpload.IsBusy)
            {
                wait = false;
                var confirmResult = MessageBox.Show("Are you sure you want to terminate the current upload process.",
                                 "Confirm Stop Process!!",
                                 MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (confirmResult == System.Windows.Forms.DialogResult.Yes)
                {
                    wait = true;
                    _workerUpload.CancelAsync();
                }
                else
                    wait = true;
            }

Проблема здесь в том, что, когда я жду результатов диалогового окна «Подтверждение отмены», процесс загрузки все еще продолжается в фоновом режиме. Есть ли способ остановить фоновый процесс, пока не будет получен результат диалогового окна.

Заранее спасибо.

...