C#(.NET)では、同じアプリケーションで実行されている2つのスレッドが異なる "WorkingFolders"を持つことができますか?C#マルチスレッドアプリケーションはスレッドごとに作業ディレクトリを使用できますか?
わかりやすく、答えは「いいえ」です。私はWORKING DIRがWin32のPROCESSによって設定されていると思います...私は間違っていますか?
次のテストコード(Win32 SetCurrentDirectory
API呼び出し)によれば、これは不可能ですが、誰かが可能にする方法を考え出していますか?
using System;
using System.Threading;
public class TestClass {
public ManualResetEvent _ThreadDone = new ManualResetEvent(false);
public static void Main() {
Console.WriteLine(Environment.CurrentDirectory);
Thread _Thread = new Thread(new ParameterizedThreadStart(Go));
TestClass test = new TestClass();
_Thread.Start(test);
if(test._ThreadDone.WaitOne()) {
Console.WriteLine("Thread done. Checking Working Dir...");
Console.WriteLine(Environment.CurrentDirectory);
}
}
public static void Go(object instance) {
TestClass m_Test = instance as TestClass;
Console.WriteLine(Environment.CurrentDirectory);
System.IO.Directory.SetCurrentDirectory("L:\\Projects\\");
Console.WriteLine(Environment.CurrentDirectory);
m_Test._ThreadDone.Set();
}
}
私は知っている誰かがこれまでに実行したことがあります!
これを試みる目的は何ですか?通常、適切なフォルダを渡すためにコードを設計するほうがよいでしょう。 –
スレッドごとに別々のアプリケーションドメインを作成している可能性があります。私は現在、例を示すことができないので、これをコメントとして追加しました。 – MarcF
@MarcF Appドメインは、プロセスごとに1つの環境セット(FYI)を変更しません。 –