有没有办法从Process线程切换回最初在退出时创建Process的线程?

时间:2014-07-07 08:24:46

标签: c# multithreading mono

public class SomeClass {
  static void Method() {
    Process p = new Process();
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.FileName = "a command line util";
    p.StartInfo.Arguments = "some arguments";
    p.EnableRaisingEvents = true;

    p.OutputDataReceived += (sender, e) => { 
      Debug.Log(e.Data); 
    };

    p.ErrorDataReceived += (sender, e) => {
      Debug.Log(e.Data);  
    };

    Thread mainThread = Thread.CurrentThread;
    p.Exited += (sender, e) => {
      if (p.ExitCode == 0) {
        // Need to do something in the thread which originally created p.
       //  I even got mainThread from above, but don't know if I can 'switch' to it.
      }
    };

    p.Start();
    p.BeginOutputReadLine();
    p.BeginErrorReadLine();
  }

我的问题基本上是这样的:

  1. 我在" main"线程并创建一个进程并启动它。
  2. 我开始从流程中获取异步事件。
  3. 当进程退出时,回调仍处于进程的线程中,但我需要在" main"中执行其他操作。线程。
  4. 如果有人想知道为什么静态以及为什么需要这一点,那么我就会在Unity(游戏引擎)上使用静态方法来执行菜单项中的代码。菜单项需要从命令行util生成资产,然后使Unity刷新其资产目录以查找新资产。问题是任何对Unity代码的调用都需要在主线程中执行,并且我开始得到Process回调时我不再在主线程中。

    更新以防万一,我是关于Unity的Mono,这是aprox。 .NET 3.5没有Windows特定的东西。因此,例如,System.Windows中的Dispatcher类不可用。

0 个答案:

没有答案