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