我有一个aspx页面,单击按钮会创建BackgroundWorker,然后调用RunWorkerAsync方法。在我的aspx文件中,我设置了Async='true'
但是当我运行应用程序并单击按钮时,看起来好像页面等待刷新,直到完成BackgroundWorker的处理。在创建和启动BackgroundWorker之后,如何控制返回页面(并刷新页面)?
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += RunJob;
worker.RunWorkerCompleted += JobCompleted;
worker.RunWorkerAsync();
答案 0 :(得分:3)
异步页面非常棒,但它们并不能满足您的需求。您需要实际完成请求才能呈现页面。然后,您可以向服务器发出另一个(异步JavaScript)请求,轮询完成。
使用BackgroundWorker
对此无效。您需要启动后台任务(或线程,如果应用程序回收不是问题),并自行跟踪这些操作的完成情况。然后,当“已完成”请求进入时,回复“尚未”消息或结果。
答案 1 :(得分:0)
简单的解决方案......
Response.Redirect("MyNewPage.aspx", true);
// Code to kick off thread.
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += RunJob;
worker.RunWorkerCompleted += JobCompleted;
worker.RunWorkerAsync();
这会导致响应完成并执行重定向,同时执行剩余的4行代码。
也...
您不必经历编写后台工作者的麻烦。您可以在Response.Redirect(..)命令之后正常执行后台任务。
希望这有帮助。