Я пытаюсь загрузить много файлов, используя загрузчик файлов c # и позволяя пользователю остановить процесс в середине, поэтому я создаю backgroundworker для запуска загрузки на него, но кнопка отмены не работает (она срабатывает после всех файловзагружен), и WorkerThread_ProgressChanged не влияет на элементы пользовательского интерфейса, текст метки не изменяется, и это мой код
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();
}