在C#中处理打印到控制台事件句柄

时间:2016-01-17 13:20:25

标签: c# console event-handling stdout

我有两个控制台应用程序,第一个是" Process1",它编译为exe并且无法更改其中的代码。 第二个是"米"用于计算Process1启动时间的控制台应用程序。我想现在是时候了 当在控制台窗口中打印HelloWorld时。

// {My Process1}:     //我把它编译成一个名为process1.exe的程序集。

Class Process1{
    static void Main(String[] args]){
        Console.Write("Hello word");
    }
}

我的第二个应用程序是一个控制台应用程序,它将process1.exe作为一个进程调用,我想知道什么时候 process1是" ready",假设它是" Hello Word"打印出来。我读到了Process.OutputDataReceived事件, 但调试后事件永远不会被触发,内部代码从未打印过。

// {Meter Application}

public Class Student{
    String ID;
    String Name;
}

public Class Program{
    public static void Main(String[] args){
        p.StartInfo = new ProcessStartInfo("process1.exe")
        {
            UseShellExecute = false,
            //Add this line
            RedirectStandardOutput = true,
        };
        Student st = new Student();
        p.OutputDataReceived += P_OutputDataReceived;
        p.Start();
        //Add this line
         p.BeginOutputReadLine();
        p.WaitForExit();
    }

    private static void P_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            string output = e.Data;
            Console.WriteLine("Process1 ready at: "+DateTime.Now);
            Console.WriteLine("Data is: " + output);

        }

}

1 个答案:

答案 0 :(得分:1)

我的评论总结如下:

Main()方法的这种修改应该这样做。

public static void Main(String[] args){
    p.StartInfo = new ProcessStartInfo("process1.exe")
    {
        UseShellExecute = false,
        RedirectStandardOutput = true
    };
    Student st = new Student();
    p.OutputDataReceived += P_OutputDataReceived;
    p.Start();
    p.BeginOutputReadLine();
    p.WaitForExit();
}