Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 暂停Backgroundworker,直到用户确认取消_C#_Winforms_Backgroundworker - Fatal编程技术网

C# 暂停Backgroundworker,直到用户确认取消

C# 暂停Backgroundworker,直到用户确认取消,c#,winforms,backgroundworker,C#,Winforms,Backgroundworker,我正在将excel文件上载到数据库中。以下是步骤: 1.我在excelRawData(数据表)中有excel数据 2.UploadProgress是进度条 int insertWkSuccess = 0; bool wait = true; int progress = 0; uploadProgress.Visible = lblPercent.Visible = true;

我正在将excel文件上载到数据库中。以下是步骤: 1.我在excelRawData(数据表)中有excel数据 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;
            }
这里的问题是,当我等待取消确认对话框结果时,上传过程仍在后台继续。是否有方法停止后台进程,直到获得对话框的结果


提前谢谢

还有,这里所谓的好处是什么?他们在锁定机器并离开10分钟时意外按下了取消按钮。他们回来,解锁机器,看到对话框,说“见鬼,不”,然后单击
no
按钮。(或更简单的场景,无论出于何种原因,他们选择“否”)。在等待他们的负面反应时,不做任何有用的工作有什么好处?如果你确信他们会回答“是”,那为什么要提示呢?肯定有办法,但你为什么要暂停呢?停止它,当用户非常确定他真的想取消时。就像每个人都说的那样,当代码已经停止上传过程时,询问用户是否确定要停止上传过程是没有意义的。当前表单中的行为将更合适。我正在尝试在确认后取消。有可能使用backgroundworker吗?有时候,越少越好。如果用户意外取消上载,会发生什么情况?他又开始了。那又怎么样?没有损失(除了一些时间)。另一方面,如果他需要确认:他看到他上传了错误的文件。那个超级机密的。。。他现在想取消。