Verwenden eines Background Workers in ASP.NET mit AJAX

Ich muss eine Hintergrundaufgabe ausführen, die einen Fortschrittsbalken mit Prozentangaben und eine Abbrechen-Schaltfläche enthält. Abgesehen von den Aufgabenspezifikationen möchte ich nur ein Beispiel zum Laufen bringen, daher habe ich nur die drei wichtigsten Ereignishandler (DoWork, ProgressChanged und RunWorkerCompleted) und eine Schleife, die nur einen Zähler inkrementiert und in DoWork 50 ms lang ruht. Es wird jedoch nur einmal am Ende aktualisiert.

In Windows Forms verwende ich einen Background Worker, der problemlos funktioniert. Ich möchte nur den gleichen Code verwenden. Ich habe jedoch Dinge gesehen, die besagen, dass ASP.NET AJAX verwenden muss, um die gleiche Funktionalität zu erhalten. Meine Fragen sind also:

1) Brauche ich wirklich AJAX, um den Background Worker zu benutzen?

2)Falls ja, Ich brauche AJAX. Was ist der einfachste und einfachste Weg, den eine Person, die nichts über AJAX weiß, unternehmen kann, um den Background-Worker auf einer ASP.NET-Webseite zum Laufen zu bringen?

3)Wenn nein, Ich brauche AJAX nicht. Kann mich jemand auf ein funktionierendes Sample verweisen, das es nicht verwendet? Ich bin auch interessiert, wenn es eine andere Threading-Methode als Hintergrundarbeiter verwendet.

Entschuldigung für die mehrteilige Frage! Wenn Sie das eine oder andere beantworten können, wäre es sehr dankbar. Es macht mir nichts aus, welche Methode ich am Ende verwende, solange es funktioniert.

Code als Referenz von der .cs Seite:

 protected void bwProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 { 
     lblProgress.Text = "Task Complete: " + e.Result;
 }

 protected void bwProcess_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     lblProgress.Text = e.ProgressPercentage.ToString();
 }

 protected void bwProcess_DoWork(object sender, DoWorkEventArgs e)
 {
     for (int i = 0; i <= 100; i++)
     {
         if (bwProcess.CancellationPending)
         {
             lblProgress.Text = "Task Cancelled.";
             e.Cancel = true;
             return;
         }
         bwProcess.ReportProgress(i);
         Thread.Sleep(50);
     }
     e.Result = "100%";
}

protected void BWClick(object sender, EventArgs e)
{
    lblProgress.Text = "Firing Process...";
    bwProcess = new BackgroundWorker();
    bwProcess.WorkerReportsProgress = true;
    bwProcess.WorkerSupportsCancellation = true;
    bwProcess.DoWork += new DoWorkEventHandler(bwProcess_DoWork);
    bwProcess.ProgressChanged += new ProgressChangedEventHandler(bwProcess_ProgressChanged);
    bwProcess.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwProcess_RunWorkerCompleted);

    if (bwProcess != null)
    {
        bwProcess.RunWorkerAsync("StartAsynchronousProcess");
    }
}

Sonstige Hinweise: Ich habe auf der @ Seite Async = "True" und EnableSessionState = "ReadOnly" eingegeben.

Danke im Voraus!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage