2010-06-08 81 views
1

我有一个aspx页面,点击按钮时创建一个BackgroundWorker,然后调用RunWorkerAsync方法。在我的aspx文件中,我设置了Async='true',但是当我运行应用程序并单击该按钮时,它就好像页面等待刷新,直到完成BackgroundWorker的处理。在BackgroundWorker创建并启动后,如何获得控件返回到页面(并刷新页面)?页面不渲染,直到BackgroundWorker.RunWorkerAsync完成

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

回答

3

异步页面很棒,但他们不会做你在想什么。您需要实际完成请求才能呈现页面。然后,您可以向服务器发出另一个(异步JavaScript)请求,轮询完成。使用BackgroundWorker不适用于此。您需要启动后台任务(或线程,如果应用程序回收不是问题),并自行跟踪完成这些操作。然后,当“完成”请求进入时,回复“尚未”消息或结果。

+0

我有一种感觉,这将是答案,但我想验证。谢谢! – brainimus 2010-06-09 17:25:09

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

希望这会有所帮助。