异步线程beginoutputreadline c#

时间:2018-06-06 10:02:12

标签: c# multithreading asynchronous process

我已经编写了一个控制台程序,它从另一个控制台程序提供数据,这些程序在3秒或更长时间后经常写入数据行,所以我尝试通过BeginOutputReadLine从控制台读取输出数据这是一个异步方法和OutputDataRecieved事件但是在读取之后它的线程退出并且它会间隔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 :(得分:0)

尝试使用以下代码从进程对象中读取输出流:

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
}