我需要执行一个后台任务,该任务有一个显示完成百分比的进度条和一个取消按钮。撇开任务细节不谈,现在我只想让一个示例正常工作,所以我只有三个主要事件处理程序(DoWork、ProgressChanged 和 RunWorkerCompleted)和一个循环,它只增加一个计数器并在 DoWork 中休眠 50 毫秒。但是,除了最后一次之外,它不会更新。
在 Windows 窗体中,我使用后台工作程序,它可以正常运行,没有任何问题。我想只使用相同的代码。但是,我一直看到说 ASP.NET 必须使用 AJAX 才能获得相同的功能。所以我的问题是:
1) 我真的需要 AJAX 来使用后台工作者吗?
2)如果是的话,我确实需要 AJAX,对于一个不了解 AJAX 的人来说,让后台工作人员启动并在 ASP.NET 网页上运行的最简单、最简单的方法是什么?
3)如果没有,我不需要 AJAX,谁能指出我不使用它的工作示例?即使它使用后台工作人员以外的其他线程方法,我也很感兴趣。
对不起,多部分的问题!如果您能回答其中之一,将不胜感激。我真的不介意我最终使用哪种方法,只要它有效。
来自 .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");
}
}
其他注意事项:我在@Page 中输入了 Async="True" 和 EnableSessionState="ReadOnly"。
提前致谢!