从Asp.net中的不同线程访问文件时出现问题

我在一个网站(使用Linq-to-Sql进行数据访问的Asp.net 3.5)中有一个进程需要按如下方式工作:

  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)。 这在主线程中运行时工作正常,因此关于multithreading情况的一些事情阻止了这一点。 我曾经想过,因为文件保存到磁盘(它是),在不同的线程中打开它应该没有任何问题。 我出错的任何想法以及我如何解决它? 谢谢!

注意:我正在使用第三方程序集打开该文件。 使用reflection器,我发现以下代码与打开文件的方式有关:

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

尝试Response.Redirect(url,false),否则’Response’将在该调用之后结束。

ASP.NET视图状态是一个很棒的function,是当今Web开发的必备工具。 它在来回传播时保持页面的状态。 不再需要担心在回发之间恢复页面控件的值。 在本文中,您将深入了解视图状态。 我们将讨论减少不必要的有效负载和保护视图状态免受窥探的方法。