StandardOutput.ReadToEnd () se cuelga [duplicado]

Esta pregunta ya tiene una respuesta aquí:

ProcessStartInfo colgando en "WaitForExit"? ¿Por qué 19 respuestas

Tengo 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?

Respuestas a la pregunta(9)

Su respuesta a la pregunta