Używanie pracownika działającego w tle w ASP.NET z AJAX

Muszę wykonać zadanie w tle, które ma pasek postępu pokazujący procent wykonania i przycisk anulowania. Pomijając zadanie, na razie chcę tylko pracować z przykładem, więc mam tylko trzy główne programy obsługi zdarzeń (DoWork, ProgressChanged i RunWorkerCompleted) oraz pętlę, która zwiększa licznik i śpi przez 50 ms w DoWork. Nie aktualizuje się jednak tylko raz na końcu.

W Windows Forms używam pracownika działającego w tle i działa poprawnie bez żadnych problemów. Chciałbym po prostu użyć tego samego kodu. Jednak widziałem rzeczy, które mówią, że ASP.NET musi używać AJAX, aby uzyskać tę samą funkcjonalność. Moje pytania to:

1) Czy naprawdę potrzebuję AJAX, aby korzystać z pracownika w tle?

2)Jeśli tak, Potrzebuję AJAX, jaki jest najłatwiejszy, najprostszy sposób, w jaki osoba, która nie zna cholernej rzeczy na temat AJAX-a, może zrobić i uruchomić pracownika w tle na stronie ASP.NET?

3)Jeśli nie, Nie potrzebuję AJAX, czy ktoś może wskazać mi działającą próbkę, która go nie używa? Jestem zainteresowany, nawet jeśli używa innej metody wątkowania niż pracownicy w tle.

Przepraszamy za pytanie wieloczęściowe! Jeśli możesz odpowiedzieć na jedno lub drugie, byłoby to bardzo mile widziane. Naprawdę nie mam nic przeciwko, którą metodę kończę, dopóki działa.

Kod do odwołania na stronie .cs:

 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");
    }
}

Inne uwagi: Wpisałem Async = „True” i EnableSessionState = „ReadOnly” w stronę @.

Z góry dziękuję!

questionAnswers(1)

yourAnswerToTheQuestion