在BackgroundWorker.RunWorkerAsync完成之前,页面不会呈现

时间:2010-06-08 18:30:49

标签: c# .net asp.net

我有一个aspx页面,单击按钮会创建BackgroundWorker,然后调用RunWorkerAsync方法。在我的aspx文件中,我设置了Async='true'但是当我运行应用程序并单击按钮时,看起来好像页面等待刷新,直到完成BackgroundWorker的处理。在创建和启动BackgroundWorker之后,如何控制返回页面(并刷新页面)?

  BackgroundWorker worker = new BackgroundWorker();
  worker.DoWork += RunJob;
  worker.RunWorkerCompleted += JobCompleted;
  worker.RunWorkerAsync();

2 个答案:

答案 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(..)命令之后正常执行后台任务。

希望这有帮助。