我有以下代码创建并打开OleDbConnection对象:
string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;HDR=No;FMT=Delimited\";", folder);
m_Connection = new OleDbConnection(connectionString);
m_Connection.Open();
应用程序可以同时运行许多线程,这些线程使用相对路径访问文件(糟糕,是的,我知道)。在此Open()
调用的非常简短瞬间,当前目录更改为为连接字符串中的folder
属性指定的Data Source
。
我说非常简短,因为我验证Open()
是罪魁祸首的程序涉及一个单独的线程,它在while循环中检查Environment.CurrentDirectory
(在{{之前开始) 1}}调用并在之后结束),并将其添加到List。该测试的结论是,当前目录在此时间的0%到2%之间变为Open()
(是的,有时从不)。
所以我真正的问题是,非常间歇性的另一个线程使用相对路径访问文件,并最终抛出一个folder
,指定用于OleDbConnection FileNotFoundException
调用的路径中的文件名。 / p>
我能想到解决这个问题的唯一选择是1)不使用Microsoft文本驱动程序,2)不使用相对路径,或3)同步所有线程以确保此调用不会发生任何调用时打开包含相对路径的文件名。还有其他想法吗?
我还尝试在Open()
调用之前暂停所有Process.GetCurrentProcess().Threads
(不包括当前线程),但这不起作用(当前线程在挂起当前线程以外的线程时被挂起 - - 我无法弄清楚原因)。无论如何,我认为这可能不是一个好主意。
感谢。