.NET上控制台输出的实时截取

原创 2007年09月25日 12:27:00
.NET上控制台输出的实时截取

.NET上控制台输出的实时截取分两种不同的情况:截取子进程的输出和截取当前进程的输出。

截取子进程的输出可以使用Process.StandardOutput属性取得一个StreamReader,并用它来读取输出。注意读取操作是阻塞的,可以使用异步方法调用或者Process.BeginOutputReadLine()来进行异步读取。例子如下:

Process p = new Process();
p.StartInfo.UseShellExecute = false; // 必须
p.StartInfo.RedirectStandardOutput = true; // 必须
p.StartInfo.FileName = "SomeApp.exe";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

截取当前进程的输出可以使用Console.SetOut()。使用这种方法需要从TextWriter派生一个类,用于接收输出。但这个方法有个缺陷,就是只能截获Console类的输出,而对非托管的C运行库printf的输出不起作用。哪位高人知道解决方法的话望赐教。例子如下:

Console.SetOut(new TextBoxWriter(textBox1));

class TextBoxWriter : TextWriter
{
    TextBox textBox;
    delegate void WriteFunc(string value);
    WriteFunc write;
    WriteFunc writeLine;

    public TextBoxWriter(TextBox textBox)
    {
        this.textBox = textBox;
        write = Write;
        writeLine = WriteLine;
    }

    // 使用UTF-16避免不必要的编码转换
    public override Encoding Encoding
    {
        get { return Encoding.Unicode; }
    }

    // 最低限度需要重写的方法
    public override void Write(string value)
    {
        if (textBox.InvokeRequired)
            textBox.BeginInvoke(write, value);
        else
            textBox.AppendText(value);
    }

    // 为提高效率直接处理一行的输出
    public override void WriteLine(string value)
    {
        if (textBox.InvokeRequired)
            textBox.BeginInvoke(writeLine, value);
        else
        {
            textBox.AppendText(value);
            textBox.AppendText(this.NewLine);
        }
    }
}
 

相关文章推荐

.NET C# 如何监控并及时的显示另一个控制台Console的输出

这个话题已经很多前辈已经提及或者说明过,不过今天我还是来炒下冷饭.很多人在论坛上问及,在不修改现有项目的前提下如何监控其控制台输出?这里我们就需要用到ProcessStartInfo中的Redirec...

.NET C# 如何监控并及时的显示另一个控制台Console的输出

这个话题已经很多前辈已经提及或者说明过,不过今天我还是来炒下冷饭.很多人在论坛上问及,在不修改现有项目的前提下如何监控其控制台输出?这里我们就需要用到ProcessStartInfo中的Redirec...

vb.net控制台 random类 随机字符,随机数 (生成4个随机3位数倒序输出)

编译环境vb.net vb控制台应用程序   题目要求: 随机生成一定范围的字符 随机生成一定范围的数字 查找输出一段字符串第n个位置后的m位字符(字符串长度不能低于n+m) 随机生成...

【黑马.Net程序员】C#控制台输入输出的控制

------------黑马.net培训-----------、wp7培训、.net培训、期待与您交流! 1.输出  在c#输出有两种,Write()和WriteLine(),它们都是Co...

asp.net控制台的例子

  • 2013年10月24日 14:02
  • 2.31MB
  • 下载

建立 ASP.NET 服务器控制台(CHM)

  • 2006年02月23日 15:31
  • 19.41MB
  • 下载

ASP.NET一个简易的WebServer,用控制台程序模拟IIS服务器 托起web服务

写了一个简单WebServer 服务器,可以处理js、css、html、aspx的请求,以及图片、视频 代码如下: public delegate void ProcessRequestHan...
  • dz45693
  • dz45693
  • 2012年04月16日 17:09
  • 4778

VS.NET 2003 + MySQL Server 5.1 编写第一个MySQL控制台程序 (三)

继续向下学。。。 接下来,我们要学习编写一个错误处理函数。咱们的代码中都是通过检查调用的 MySQL 库函数的返回值来判断函数调用是否成功。返回指针的函数调用,判断返回值是否是一个空指针(NULL...
  • gmbros
  • gmbros
  • 2017年04月20日 15:25
  • 293

.NET/C#入门之开发控制台应用

1.下载安装Visual Studio    下载地址:https://www.visualstudio.com/zh-hans/downloads/         ~~~这里就省略...

c#.NET 调用命令控制台 并获取执行结果

本文阐述了如何在.net中悄悄的执行dos命令,并通过重定向输出来返回结果的方式。 一、怎样使dos命令悄悄执行,而不弹出控制台窗口? 1.需要执行带“/C”参数的“cmd.exe”命令,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET上控制台输出的实时截取
举报原因:
原因补充:

(最多只允许输入30个字)