如何防止Microsoft文本驱动程序(Microsoft.Jet.OLEDB.4.0)更改当前目录(C#应用程序)

如何防止Microsoft文本驱动程序(Microsoft.Jet.OLEDB.4.0)更改当前目录(C#应用程序),c#,oledb,C#,Oledb,我有以下创建和打开OleDbConnection对象的代码: string connectionString=string.Format(“Provider=Microsoft.Jet.OLEDB.4.0;数据源={0};扩展属性=\”文本;HDR=No;FMT=Delimited\”;”,文件夹); m_连接=新的OLEDB连接(connectionString); m_Connection.Open(); 应用程序可以同时运行多个线程,这些线程使用相对路径访问文件(糟糕,是的,我知道)。在

我有以下创建和打开OleDbConnection对象的代码:

string connectionString=string.Format(“Provider=Microsoft.Jet.OLEDB.4.0;数据源={0};扩展属性=\”文本;HDR=No;FMT=Delimited\”;”,文件夹);
m_连接=新的OLEDB连接(connectionString);
m_Connection.Open();
应用程序可以同时运行多个线程,这些线程使用相对路径访问文件(糟糕,是的,我知道)。在这个
Open()
调用的一个非常短暂的瞬间,当前目录被更改为连接字符串中为
数据源
属性指定的
文件夹

我说得非常简短,因为我验证
Open()
是否是罪魁祸首的过程涉及一个单独的线程,该线程在while循环中检查
环境.CurrentDirectory
(在调用
Open()
之前开始,之后结束),并将其添加到列表中。此测试得出的结论是,当前目录在这段时间的0%到2%之间更改为
文件夹
(是的,有时从不)

因此,我真正的问题是,另一个线程非常间歇性地使用相对路径访问文件,并最终抛出一个
FileNotFoundException
,该线程在用于OleDbConnection
Open()
调用的路径中指定一个文件名

我能想到的唯一解决方法是:1)不使用Microsoft文本驱动程序,2)不使用相对路径,或3)同步所有线程,以确保在调用打开包含相对路径的文件名时不会发生此调用。还有其他想法吗

在调用
Open()
之前,我还尝试挂起所有
Process.GetCurrentProcess().Threads
(不包括当前线程),但这不起作用(挂起当前线程以外的线程时,当前线程被挂起--我不知道为什么)。我觉得这可能不是个好主意


谢谢。

您可以在启动时存储当前目录,然后使用
路径。将
与存储的值和相对路径结合起来。这可能是我必须要做的。谢谢