StandardOutput.ReadToEnd () зависает [дубликат]

На этот вопрос уже есть ответ:

ProcessStartInfo висит на «WaitForExit»? Зачем 19 ответов

У меня есть программа, которая часто использует внешнюю программу и читает ее результаты. Он работает довольно хорошо, используя ваш обычный вывод процесса перенаправления, но один конкретный аргумент по какой-то причине зависает, когда я пытаюсь его прочитать, без сообщения об ошибке - не исключение, он просто «останавливается», когда достигает этой строки. Конечно, я использую централизованную функцию для вызова и чтения выходных данных из программы, а именно:

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;
    }
}

Висит строкаresult = proc.StandardOutput.ReadToEnd();, но опять же, не каждый раз, только когда отправляется определенный аргумент («старт-сервер»). Все остальные аргументы работают просто отлично - он читает значение и возвращает его. Также странно, как он висит. Он не останавливается и не выдает ошибку или что-то еще, он просто останавливает обработку. Как будто это команда «return», за исключением того, что она даже не возвращается к вызывающей функции, она просто останавливает все, когда интерфейс все еще работает. Кто-нибудь испытывал это раньше? Кто-нибудь есть идеи, что я должен попробовать? Я предполагаю, что это что-то неожиданное в самом потоке, но есть ли способ, которым я могу обработать / проигнорировать это так, чтобы он все равно читал это?

Ответы на вопрос(9)

Ваш ответ на вопрос