Чтение из StandardError и StandardOutput зависает

Я использовал душу отсюда: ProcessStartInfo висит на "WaitForExit" ? Почему? Чтобы создать процесс запуска и получить его StandardOutput и StandardError. Проблема в том, что все еще зависает! Я считаю, что это может быть потому, что я использую cmd. "NoJava" в моем коде фактически является Filepath для файла .class, который выводит команду и отправляет ее на сервер единства. если я делаю вызов вручную java -cp E:/Java/src/ Lift в cmd, я сначала получаю 1 строку кода: Command: objects["Door"].transform.position.x += ((new Vector3(0.0,1.0,0.0))).x*0.6;objects["Door"].transform.position.y += ((new Vector3(0.0,1.0,0.0))).y*0.6;objects["Door"].transform.position.z += ((new Vector3(0.0,1.0,0.0))).z*0.6; и только тогда, если я переключу окно на единицу, я получаю остальную часть сообщения (я считаю, что сервер только Принимая соединения, в то время как единство является активным окном). Теперь, если я попытаюсь сделать это так, он зависает:

using (run_process = new Process())
        {
            run_process.StartInfo.FileName = "cmd";
            run_process.StartInfo.Arguments = " /C java -cp "+noJava;
            //run_process.StartInfo.CreateNoWindow = true;
            run_process.StartInfo.UseShellExecute = false;
            run_process.StartInfo.RedirectStandardOutput = true;
            run_process.StartInfo.RedirectStandardError = true;

        StringBuilder output = new StringBuilder();
        StringBuilder error = new StringBuilder();

        using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false))
            using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false))
        {
            run_process.OutputDataReceived += (sender, e) => {
                if (e.Data == null)
                {
                    outputWaitHandle.Set();
                }
                else
                {
                    output.AppendLine(e.Data);
                }
            };
            run_process.ErrorDataReceived += (sender, e) =>
            {
                if (e.Data == null)
                {
                    errorWaitHandle.Set();
                }
                else
                {
                    error.AppendLine(e.Data);
                }
            };

            run_process.Start();

            run_process.BeginOutputReadLine();
            run_process.BeginErrorReadLine();

            if (run_process.WaitForExit(3000) &&
                    outputWaitHandle.WaitOne(3000) &&
                    errorWaitHandle.WaitOne(3000))
            {
                // Process completed. Check process.ExitCode here.
            }
            else
            {
                // Timed out.
            }
        }
        }

Я попытался решить эту проблему уже 2 дня и до сих пор не смог заставить ее работать. Пожалуйста, помогите!

Ответ 1

Для всех, у кого есть такая же проблема: если, наконец, нашли решение.

Проблема заключается в том, что при запуске playmode начинается объединение adb.exe, что прерывает работу сервера. Ссылка на ошибку: http://forum.unity3d.com/threads/bug-unity-runs-adb-exe-when-entering-play-mode-in-the-editor.148176/

После написания небольшого обработчика процесса "adb.exe" все стало нормально работать!: D