Я использовал душу отсюда:
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 дня и до сих пор не смог заставить ее работать. Пожалуйста, помогите!
