gpt4 book ai didi

asp.net - 在 ASP.NET 中通过 AJAX 使用后台工作程序

转载 作者:行者123 更新时间:2023-12-02 12:30:54 25 4
gpt4 key购买 nike

我需要执行一个后台任务,该任务有一个显示完成百分比的进度条和一个取消按钮。抛开任务细节不谈,现在,我只想让一个示例正常工作,因此我只有三个主要事件处理程序(DoWork、ProgressChanged 和 RunWorkerCompleted)和一个仅递增计数器并在 DoWork 中休眠 50 毫秒的循环。但是,除了最后一次之外,它不会更新。

在 Windows 窗体中,我使用后台工作程序,它可以正常运行,没有任何问题。我想使用相同的代码。然而,我看到一些内容说 ASP.NET 必须使用 AJAX 才能获得相同的功能。所以我的问题是:

1) 我真的需要 AJAX 来使用后台工作程序吗?

2) 如果是,我确实需要 AJAX,对于一个对 AJAX 完全不了解的人来说,让后台工作程序启动并运行的最简单、最简单的方法是什么?在 ASP.NET 网页上?

3) 如果没有,我不需要 AJAX,任何人都可以向我指出一个不使用 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"。

提前致谢!

最佳答案

Web 编程带来了许多挑战,而桌面编程时这些挑战很容易被视为理所当然。从一种转向另一种可能需要很多改变。生成长时间运行的线程是需要更加小心以避免陷阱的事情之一。应用程序池不知道您生成的线程,因此当它回收时,它将杀死那些导致应用程序中出现意外行为的线程。有关更多信息,请参阅这篇文章,Can I use threads to carry out long-running jobs on IIS?

这意味着您需要使用更持久的方式来跟踪进度。数据库可能是最好的,但即使是文件也会在池回收后仍然存在。

<小时/>

AJAX 非常适合这种情况,因为它允许您在后台异步从数据库中提取进度并更新网页。以下是如何实现这一目标的简短示例。所有百分比计算均在服务器端完成。

function getProgress() {
$.ajax({
url: '/progress', // send HTTP-GET to /progress page
dataType: 'json', // return format will be JSON
success: function(result) { // function to run once the result is pulled
$("#p1").html('Percentage: %' + result);
if (result == "100")
clearInterval(window.progressID);
}
});
}

function startGetProgress() {
window.progressID = setInterval(getProgress, 10000); // update progress every 10 seconds
}

上面的例子使用了JQuery ajax方法,http://api.jquery.com/jQuery.ajax/因此您需要引用 JQuery 库。

无论您使用的是 webforms 还是 mvc,您都可以添加 web api Controller 来处理 ajax 请求。如果您需要我澄清任何事情,请告诉我。

关于asp.net - 在 ASP.NET 中通过 AJAX 使用后台工作程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13165965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com