Mam potrzebę wykonania zadania w tle, które ma pasek postępu, który pokazuje procent zrobiony i przycisk anulowania. Szczegóły zadania na bok, na razie chcę tylko, aby przykład działał, więc mam tylko trzy główne programy obsługi zdarzeń (DoWork, ProgressChanged i RunWorkerCompleted) oraz pętlę, która tylko zwiększa licznik i śpi przez 50 ms w DoWork. Jednak nie aktualizuje się, z wyjątkiem jednego na końcu.Używanie pracownika tła w środowisku ASP.NET z AJAX
W Windows Forms używam pracownika tła i działa on poprawnie bez żadnych problemów. Chciałbym 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ść. Więc moje pytania są następujące:
1) Czy naprawdę potrzebuję AJAX, aby użyć pracownika w tle?
2) Jeśli tak, ja potrzebuję AJAX, co jest najprostszym, najbardziej najprostszy sposób osoba, która nie wie nic o cerować AJAX może zrobić, aby dostać pracownika do tła i uruchomiony na ASP. Strona internetowa NET?
3) Jeśli nie mam, nie potrzebuję AJAX, czy ktoś może wskazać mi działającą próbkę, która jej nie używa? Jestem zainteresowany, nawet jeśli używa innej metody przewijania niż pracownicy w tle.
Przepraszamy za wieloczęściowe pytanie! Jeśli możesz odpowiedzieć na jedno lub drugie, byłoby to bardzo cenne. Naprawdę nie mam nic przeciwko której metodzie używam tak długo, jak to działa.
Kod odniesienia ze strony .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: Wszedłem Async = "true" i enableSessionState = "readonly" w @Page.
Z góry dziękuję!
Zobacz http://stackoverflow.com/questions/57845/backgroundworker-thread-in-asp-net – Despertar
http://msdn.microsoft.com/en-us/library/ms178210%28v=vs.85% 29.aspx jest bardziej aktualną wersją.Nie wiem, jak dostosować to do paska postępu, ale myślę, że powoli zbliżam się. – Brandi