从Asp.net中的其他线程访问文件时出现问题
时间:2020-03-06 14:35:34 来源:igfitidea点击:
我在一个网站(使用Linq-to-Sql进行数据访问的Asp.net 3.5)中有一个进程,该进程需要按以下方式工作:
- 上传文件
- 记录有关文件的信息并将其保存到数据库
- 将数据从文件导入数据库
- 重定向到其他页面
像这样按顺序运行时,一切正常。但是,由于导入的文件可能很大,因此我希望第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 } }
解决方案
尝试Response.Redirect(url,false),否则" Response"将在该调用后立即结束。
ASP.NET视图状态是当今Web开发的一项重要功能,也是一项必不可少的工具。当页面来回移动时,它保持页面的状态。无需担心在回发之间恢复页面控件的值。在本文中,我们将深入了解视图状态。我们将讨论减少不必要的有效载荷并保护视图状态不被窥视的方法。