我使用Backgroundworker對用戶上傳的文件進行數據處理,所以非常耗時。同時,用戶希望導航到其他頁面來做其他事情。Asp.net中的BackgroundWorker在導航到其他頁面時仍然可以工作嗎?
所以我的問題是,有可能BackgroundWorker仍然繼續處理上傳的數據,而當前頁面導航到其他頁面?
如果是,如何?示例代碼供參考,非常感謝!
我使用Backgroundworker對用戶上傳的文件進行數據處理,所以非常耗時。同時,用戶希望導航到其他頁面來做其他事情。Asp.net中的BackgroundWorker在導航到其他頁面時仍然可以工作嗎?
所以我的問題是,有可能BackgroundWorker仍然繼續處理上傳的數據,而當前頁面導航到其他頁面?
如果是,如何?示例代碼供參考,非常感謝!
BackgroundWorker將被銷燬,其工作永遠不會完成。沒有辦法解決這個問題,不是沒有辦法解決這個問題,但是如果你使用「解決這個問題的方法」,那麼任何看到你的代碼的人都會避開它(它涉及在會話中存儲元數據並在頁面加載時將其反序列化爲繼續處理)。
你唯一真正的選擇是將你的應用程序分成多個部分。一個ASP.NET頁面允許上載並將該文件放入目錄中。然後您有一個Windows服務或其他進程執行您需要的轉換。如果您將Windows服務報告進度報告給SQL數據庫,則可以在「狀態」頁面中查看其上傳文件的狀態。
如果您必須在單個網頁中完成所有這些工作,那麼您必須執行類似Facebook的應用程序:在完成所有操作之前,您無法離開該頁面。
我知道這不是你正在尋找的,但它是在網上開發的現實。
您可以將數據處理代碼放入另一個頁面,並從處理上載的頁面異步調用它。
Pesodo代碼:
Page_Load()
{
UplaoadFileAndSaveSomeWher();
Call Asynchronous("ProccessorPage.aspx");
Response.Redirect("Go To Other Place");
...
...
...
}
調用異步的網頁,你可以使用這樣的事情:
string url = "http://www.google.com";
WebClient client = new WebClient();
client.DownloadDataAsync(new Uri(url));
傷心地聽到這個:( – DEN 2011-04-21 04:37:54