C# WinForm中截获Console输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WinForm中截获Console输出相关的知识,希望对你有一定的参考价值。

现在有一Console 控制台程序,使用Console将日志输出到控制台中,现在想进行调整,改为WinForm程序,将日志输出到界面中。但是重写输出比较麻烦。有没有办法将原来调用Console.Write输出的结果输出到界面中。

C#控制台窗体(Console Window)内容输出到文本文件

//设置控制台输出
Console.SetOut(sw);

//输出Console内容到文本文件
public void WriteConsoleText()

StringWriter sw = new StringWriter();

//Sets the System.Console.Out property to the specified System.IO.TextWriter object.
//设置控制台窗体输出
Console.SetOut(sw);

Console.WriteLine("输出内容1");
Console.WriteLine("输出内容2");
Console.WriteLine("测试1");

File.WriteAllText(@"c:\aaa.txt", sw.ToString());
参考技术A 要直接输出的话得重绘背景,很麻烦的。

用个Label控件或TextBox来显示就行了

C# winform 缩小到托盘 无法关机?

Form_Closing 事件是让它hide()

但这样就无法关机了,怎么解决呢?
我关闭事件里这样写

if (!this.isExitApp)

e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
this.Hide();


但结果是,关机的时候,其它能关的都关了,唯独这个关不了

关机时,系统给你的程序发送一个关机消息,你的程序调用FormClosing事件委托函数,而此时你的isExitApp不为true,因而只是隐藏,不退出。
应该截获关机消息处理之。
改为:
private bool isExitApp = false;
private const int WM_QUERYENDSESSION = 0x0011;
protected override void WndProc(ref Message m)

switch (m.Msg)

case WM_QUERYENDSESSION:
isExitApp = true;
break;
default:
base.WndProc(ref m);
break;



private void Form7_FormClosing(object sender, FormClosingEventArgs e)

if (!this.isExitApp)

e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
this.Hide();


参考技术A 怎么会呢?
关机的时候什么都结束了啊!
参考技术B 我也觉得不可能...而且你关闭的时候最小化干什么?? 参考技术C 这个关不了是什么意思?关机的时候是要先关闭你的所有进程,这块由你的操作系统办,跟你代码怎么写的应该没什么关系

以上是关于C# WinForm中截获Console输出的主要内容,如果未能解决你的问题,请参考以下文章

c# winform中怎么截获处理windows关闭的消息 C#

C# - Winform: 在窗体加载的过程中截获异常,如何不让窗体显示出来。

C# Winform里面用Console.WriteLine输出也不会报错,那输出到哪了?

C# winform程序里面有没有输出字符串的方法

c#输入语句

C# winform 缩小到托盘 无法关机?