Асинхронные потоки beginoutputreadline c # - PullRequest
0 голосов
/ 06 июня 2018

Я написал консольную программу, которая выдает данные из другой консольной программы, которая часто записывает строки данных через 3 или более секунд, поэтому я пытаюсь прочитать выходные данные из консоли с помощью BeginOutputReadLine Это асинхронный метод и событие OutputDataRectained, но после чтения некоторыхСтроки выходят из своих потоков, и он идет с интервалом в 3 или более минут, что я должен сделать, чтобы предотвратить этот интервал?

using System.Diagnostics;

namespace FirstTest
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessStartInfo info = new ProcessStartInfo("start.bat")
            {
                UseShellExecute = false,
                RedirectStandardOutput = true
            };
            Process process = new Process() { StartInfo = info };
            process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
            {               
                Debug.WriteLine(e.Data);
            });
            process.EnableRaisingEvents = true;

            process.Start();
            process.BeginOutputReadLine();
            while (true) ;
        }
    }
}

Ниже приведены выходные данные отладки:

Поток 0x2030вышел с кодом 0 (0x0).

Поток 0x3b2c вышел с кодом 0 (0x0).

1 Ответ

0 голосов
/ 06 июня 2018

Попробуйте использовать приведенный ниже код для чтения выходного потока из объекта процесса:

ProcessStartInfo info = new ProcessStartInfo()
{
    RedirectStandardOutput = true,
    FileName = "start.bat",
    UseShellExecute = false,
    CreateNoWindow = true
};
var process = new Process {
    StartInfo = info
};

, затем запустите процесс и прочитайте его:

process.Start();
while (!process.StandardOutput.EndOfStream) {
    var outputLine = process.StandardOutput.ReadLine();
    // do something with the outputLine
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...