C# 在BackgroundWorker.RunWorkerAsync完成之前不呈现页面

C# 在BackgroundWorker.RunWorkerAsync完成之前不呈现页面,c#,.net,asp.net,C#,.net,Asp.net,我有一个aspx页面,点击按钮创建一个BackgroundWorker,然后调用RunWorkerAsync方法。在我的aspx文件中,我设置了Async='true',但当我运行应用程序并单击按钮时,页面似乎在等待刷新,直到BackgroundWorker的处理完成。在创建并启动BackgroundWorker之后,如何让控件返回页面(并刷新页面) BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += Ru

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

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

异步页面很好,但它们并不能满足您的需求。您需要实际完成请求才能呈现页面。然后,您可以向服务器发出另一个(异步JavaScript)请求,轮询是否完成

使用
BackgroundWorker
对此不起作用。您需要启动后台任务(或者线程,如果应用程序回收不是问题的话),并自己跟踪这些操作的完成情况。然后,当“是否完成”请求传入时,用“尚未”消息或结果进行回复。

简单解决方案

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


希望这能有所帮助。

我觉得这就是答案,但我想验证一下。谢谢