StandardOutput.ReadToEnd () se cuelga [duplicado]
Esta pregunta ya tiene una respuesta aquí:
ProcessStartInfo colgando en "WaitForExit"? ¿Por qué 19 respuestasTengo un programa que utiliza con frecuencia un programa externo y lee sus resultados. Funciona bastante bien usando su salida habitual de redirección de proceso, pero un argumento específico por alguna razón se cuelga cuando intento leerlo, sin mensaje de error, sin excepción, simplemente se 'detiene' cuando llega a esa línea. Por supuesto, uso una función centralizada para llamar y leer la salida del programa, que es esta:
public string ADBShell(string adbInput)
{
try
{
//Create Empty values
string result = string.Empty;
string error = string.Empty;
string output = string.Empty;
System.Diagnostics.ProcessStartInfo procStartInfo
= new System.Diagnostics.ProcessStartInfo(toolPath + "adb.exe");
procStartInfo.Arguments = adbInput;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
procStartInfo.WorkingDirectory = toolPath;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
// Get the output into a string
proc.WaitForExit();
result = proc.StandardOutput.ReadToEnd();
error = proc.StandardError.ReadToEnd(); //Some ADB outputs use this
if (result.Length > 1)
{
output += result;
}
if (error.Length > 1)
{
output += error;
}
Return output;
}
catch (Exception objException)
{
throw objException;
}
}
La línea que cuelga esresult = proc.StandardOutput.ReadToEnd();
, pero de nuevo, no siempre, solo cuando se envía un argumento específico ("servidor de inicio"). Todos los demás argumentos funcionan bien: lee el valor y lo devuelve. También es extraño la forma en que cuelga. No se congela ni da un error ni nada, solo detiene el procesamiento. Como si fuera un comando de 'retorno', excepto que ni siquiera regresa a la función de llamada, simplemente detiene todo con la interfaz aún en funcionamiento. ¿Alguien ha experimentado esto antes? Alguien tiene alguna idea de lo que debo probar? Supongo que es algo inesperado dentro de la transmisión en sí, pero ¿hay alguna manera de poder manejar / ignorar esto para que lo lea de todos modos?