c#控制台输出到form
来源:互联网 发布:服务器开启3306端口 编辑:程序博客网 时间:2024/05/24 00:30
.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);
}
}
}
- c#控制台输出到form
- C# 控制台内容输出到文件
- C#控制台应用程序 “输出”到控制台 Console.WriteLine
- form程序利用控制台输出
- C#控制台的输入和输出-Console类-输出到控制台
- log4j输出到控制台
- qt输出到控制台
- C#控制台输出
- C#控制台输出菱形
- C# 控制台输出
- C#控制台基础 使用filestream读取txt文本文件并输出到控制台
- VS非控制台程序输出到控制台
- RAILS输出日志到控制台
- eclipse控制台输出到文件
- log4j日志输出到控制台
- QtCreator输出信息到控制台
- 1.masm32-输出到控制台
- eclipse控制台输出到文件
- +++++++
- 程序访问物理地址之MmMapIoSpace 与 OALPAtoVA
- 程序员不成熟的若干个特征
- 笑话,
- 对所有想学SEO的一句话--小集喔SEO记录28
- c#控制台输出到form
- 使用 Linux 和 Hadoop 进行分布式计算
- 【java】关于Java 对象序列化您不知道的 5 件事
- C#实现ActiveX控件开发与部署---开发实现篇
- WINCE设备UDP SOCKET开发体会
- 对程序员职业规划的一些看法
- Tomcat User 配置
- Android 编译系统分析
- boost::bind