Я загружаю файл 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;
}
Проблема здесь в том, что, когда я жду результатов диалогового окна «Подтверждение отмены», процесс загрузки все еще продолжается в фоновом режиме. Есть ли способ остановить фоновый процесс, пока не будет получен результат диалогового окна.
Заранее спасибо.