2010-06-08 102 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(..)命令後正常執行後臺任務。

希望這會有所幫助。