依次启动几个System.Diagnostics.Process时,Unity Editor冻结,直到最后一个过程完成

我有一个方法可以通过System.Diagnostics.Process启动外部进程,并以字符串形式返回其输出:

public static string ExecuteCommand(string command,string arguments)
{
    var processInfo = new System.Diagnostics.ProcessStartInfo(command,arguments));
    processInfo.CreateNoWindow = true;
    processInfo.RedirectStandardOutput = true;
    processInfo.UseShellExecute = false;

    string output = "";
    var process = System.Diagnostics.Process.Start(processInfo);

    while (!process.StandardOutput.EndOfStream)
        output += process.StandardOutput.ReadLine() + "\n";

    process.WaitForExit();
    process.Close();

    Debug.Log(output);
    return output;
}

这可以正常工作,在执行命令时编辑器没有响应,这可以使用process.WaitForExit()标志,但是我注意到,当多次调用此函数时,编辑器将保持无响应,直到最后一条命令完成执行。所以,如果我打电话:

ExecuteCommand("adb","install test.apk")
Debug.Log("A")
ExecuteCommand("adb","uninstall com.app.test")
Debug.Log("B")
ExecuteCommand("adb","push file.mp4")
Debug.Log("C")

编辑器冻结,最后一条命令(adb推送)完成执行后,一次打印A,B和C。我可以理解ExecuteCommand方法正在阻塞,但是一旦完成,就不应该控制将其交还Unity Editor并让其在两次调用之间打印调试消息吗?

我该如何解决?我不介意在执行命令时冻结编辑器,但我想给用户一些指示,指示命令运行良好,因为所有命令加在一起可能要花费一些时间。在线一些线程建议使用协程,但这不是我的选择,因为这是一个EditorWindow脚本。

zzxx1z2x 回答:依次启动几个System.Diagnostics.Process时,Unity Editor冻结,直到最后一个过程完成

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3145805.html

大家都在问