2008-09-23 68 views
0

從不同的線程訪問文件我有一個網站的過程(使用Asp.net 3.5 LINQ到SQL進行數據存取),需要的工作方式如下:問題在Asp.net

  1. 上傳文件
  2. 記錄並保存信息有關文件,從數據庫文件
  3. 將數據導入到數據庫
  4. 重定向到不同的頁面

運行時順序像這樣,一切正常。但是,由於被導入的文件可能非常大,我希望第3步在UI線程的不同線程上運行。用戶應該在步驟3仍在進行時進入步驟4,並且步驟4中的屏幕將定期更新以讓用戶知道何時導入完成。

我處理的線程如下:

public class Import { 

    public static void ImportPendingFile() { 
    Import i = new Import(); 
    Thread newThread = new Thread(new ThreadStart(i.ImportFile)); 
    newThread.Start(); 
    } 

    public void ImportFile() { 
    // 1. Query DB to identify pending file 
    // 2. Open up and parse pending file 
    // 3. Import all data from file into DB 
    // 4. Update db to reflect that import completed successfully 
    } 
} 

而在代碼隱藏:

protected void butUpload(object sender, EventArgs e) { 
    // Save file, prepare for import 
    Import.ImportPendingFile(); 
    Response.Redirect(NewLocation); 
} 

做這件事時,我能夠通過調試程序,以確認新的線程正確啓動。但是,每當我這樣做時,線程在嘗試訪問文件時都會中止(後面的代碼中的第2步)。這在主線程中運行時工作正常,所以關於多線程情況的一些事情阻止了這一點。我曾經想過,因爲文件被保存到磁盤(它是),在不同的線程中打開它應該沒有任何問題。任何想法,我已經出錯了,我該如何解決它?謝謝!

注意:我正在使用第三方程序集打開文件。使用反射,我發現與此相關的是如何打開了該文件的下面的代碼:

if (File.Exists(fileName)) { 
    using (FileStream stream = new FileStream(fileName, FileMode.Open)) { 
    // use stream to open file 
    } 
} 

回答

1

嘗試的Response.Redirect(網址,FALSE),否則「響應」只是調用之後將結束。

+0

謝謝!這總是最簡單的事情...... – 2008-09-23 11:43:15

0

ASP.NET視圖狀態是當今Web開發的一個重要特性和重要工具。它在來回傳輸時維護頁面的狀態。沒有必要擔心在回發之間恢復頁面控件的值。在本文中,您將對視圖狀態有深入的瞭解。我們將討論減少不必要的有效負載和保護視圖狀態免受窺視的方法。