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();
}
我的问题基本上是这样的:
如果有人想知道为什么静态以及为什么需要这一点,那么我就会在Unity(游戏引擎)上使用静态方法来执行菜单项中的代码。菜单项需要从命令行util生成资产,然后使Unity刷新其资产目录以查找新资产。问题是任何对Unity代码的调用都需要在主线程中执行,并且我开始得到Process
回调时我不再在主线程中。
更新以防万一,我是关于Unity的Mono,这是aprox。 .NET 3.5没有Windows特定的东西。因此,例如,System.Windows中的Dispatcher类不可用。