12

C# (.NET) では、同じアプリケーションで実行されている 2 つのスレッドが異なる "WorkingFolders" を持つことができますか??

私が知る限り、答えは「NO」です。WORKING DIRはWin32のPROCESSによって設定されていると思います..ここで間違っていますか?

次のテスト コード (および Win32 SetCurrentDirectoryAPI 呼び出し) によると、これは不可能ですが、可能にする方法を見つけた人はいますか?

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();
  }
}

私は、誰かが以前にこれに出くわしたに違いないことを知っています!

4

2 に答える 2