我有一个集成服务包(VS 2012),它从 Excel 工作簿加载值并将它们存储在 SQL Server 中。我正在使用第 3 方库在 C# 脚本任务中提取工作簿数据,但在此之前,在任务中,我创建了一个 Filestream:
MessageBox.Show("Step 1");
using (FileStream fsWorkbook = new FileStream(strWkbkFilePath, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite))
{
MessageBox.Show("Step 2");
//...
}
FileStream 构造崩溃并出现错误“进程无法访问文件......因为它正被另一个进程使用。” 我知道这是发生崩溃的地方,因为我看到了“步骤 1”消息框,但没有看到“步骤 2”。
令人沮丧的是,如果我在脚本任务中设置断点,在导致错误的行之前开始单步执行代码,我可以继续并访问工作簿文件而不会出错。起初我认为这可能是由于竞态条件造成的,但后来我添加了上面显示的消息框,它也会在创建文件流之前暂停执行。MessageBox 导致的暂停并不能防止在非调试模式下运行时出现错误。
我已经尝试使用System.IO.File.Open和 FileStream 构造函数,两者都带有FileShare.ReadWrite,按照这个 SO thread,那么为什么我会收到共享错误?为什么调试时不会发生?