我正在尝试使用c#文件上载器上传许多文件,并使用户能够在中间停止该过程,因此我创建了backgroundworker在其上运行上载,但取消按钮不起作用(在所有文件之后触发已上传),WorkerThread_ProgressChanged不会影响UI元素,标签文本也不会更改,这就是我的代码
protected void cancelupload_Click(object sender, EventArgs e)
{
workerThread.CancelAsync();
if (workerThread.CancellationPending)
{
}
}
private void WorkerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Uploadpercentage.Text= "Uploading... (" + e.ProgressPercentage + "%)";
}
private void WorkerThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
// lblStopWatch.Text = "Cancelled";
}
else
{
// lblStopWatch.Text = "Stopped";
}
}
private void WorkerThread_DoWork(object sender, DoWorkEventArgs e)
{
DateTime startTime = DateTime.Now;
_keepRunning = true;
List<KeyValuePair<string, string>> Unuploaded_files = new List<KeyValuePair<string, string>>() { };
int count = 0;
while (_keepRunning && count < fileCollection.Count)
{
HttpPostedFile uploadfile = fileCollection[count];
String fileName = Path.GetFileName(uploadfile.FileName);
string fileExxtension = Path.GetExtension(uploadfile.FileName);
if (ValidExtensions.Contains(fileExxtension))
{
if (File.Exists(Chosen_Site_Path + @"\" + Selected_folder_name.SelectedItem.Text + @"\" + fileName))
{
KeyValuePair<string, string> Unuploaded_file = new KeyValuePair<string, string>(fileName, "Another file exists with the same name!");
Unuploaded_files.Add(Unuploaded_file);
}
else
{
uploadfile.SaveAs(Chosen_Site_Path + @"\" + Selected_folder_name.SelectedItem.Text + @"\" + fileName);
log.INSERT_ACTIVITY_LOG(Session["User_PK"].ToString(), Session["User_Type"].ToString(), "Uploader Home Page : Uploaded " + fileName + "Selected site " + BASF_SITE_ID);
log.INSERT_SITE_HISTORY(Session["User_PK"].ToString(), BASF_SITE_ID, "Uploaded file: " + fileName);
}
}
else
{
KeyValuePair<string, string> Unuploaded_file = new KeyValuePair<string, string>(fileName, "File type is not allowed");
Unuploaded_files.Add(Unuploaded_file);
}
count++;
string timeElapsedInstring = (DateTime.Now - startTime).ToString(@"hh\:mm\:ss");
int percent = (int)(((Decimal)count / fileCollection.Count ) *100);
workerThread.ReportProgress(percent, timeElapsedInstring);
if (workerThread.CancellationPending)
{
// this is important as it set the cancelled property of RunWorkerCompletedEventArgs to true
e.Cancel = true;
break;
}
}
if (Unuploaded_files.Count == 0)
{
string message = "alert('Files Uploaded')";
ScriptManager.RegisterClientScriptBlock(submitupload, this.GetType(), "alert", message, true);
}
else
{
string msg = "UNUPLOADED FILES:" + @"\" + "n";
for (int i = 0; i < Unuploaded_files.Count; i++)
{
msg += Unuploaded_files[i].Key + ": " + Unuploaded_files[i].Value + @"\" + "n";
}
string alertmsg = "alert('" + msg + "')";
ScriptManager.RegisterClientScriptBlock(submitupload, this.GetType(), "alert", alertmsg, true);
}
viewSites();
}