2008-09-23 27 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开发的一个重要特性和重要工具。它在来回传输时维护页面的状态。没有必要担心在回发之间恢复页面控件的值。在本文中,您将对视图状态有深入的了解。我们将讨论减少不必要的有效负载和保护视图状态免受窥视的方法。