我曾经看到过一个
winform
应用程序的源代码,代码中有一个Console.WriteLine();
。我问了原因,我被告知这是为了调试目的。
请问
Console.WriteLine();
中 winform
的本质是什么以及它执行什么操作,因为当我尝试使用它时,它从未写过任何内容。
它写入控制台。
最终用户不会看到它,说实话,将其放入正确的日志中会更干净,但如果您通过 VS 运行它,控制台窗口将会填充。
您可以将调试信息定向到控制台应用程序。
正如您在下面的示例中看到的,有一个命令附加父窗口,然后向其注入信息。
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace MyWinFormsApp
{
static class Program
{
[DllImport( "kernel32.dll" )]
static extern bool AttachConsole( int dwProcessId );
private const int ATTACH_PARENT_PROCESS = -1;
[STAThread]
static void Main( string[] args )
{
// redirect console output to parent process;
// must be before any calls to Console.WriteLine()
AttachConsole( ATTACH_PARENT_PROCESS );
// to demonstrate where the console output is going
int argCount = args == null ? 0 : args.Length;
Console.WriteLine( "nYou specified {0} arguments:", argCount );
for (int i = 0; i < argCount; i++)
{
Console.WriteLine( " {0}", args[i] );
}
// launch the WinForms application like normal
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault( false );
Application.Run( new Form1() );
}
}
}
这是此示例的资源:http://www.csharp411.com/console-output-from-winforms-application/
您通常不会真正使用它,但如果您附加了控制台或使用AllocConsole,它将像在任何其他控制台应用程序中一样运行,并且输出将在那里可见。
为了快速调试,我更喜欢
Debug.WriteLine
,但对于更强大的解决方案,Trace 类可能更可取。
除非
Console
Output
窗口,否则它不会执行任何操作。Debug.WriteLine
来代替。
Debug.WriteLine
的好处是在Release
模式下构建时它会得到优化。
注意: 正如 Brad Christie 和 Haedrian 所指出的,显然,在运行 Windows 窗体应用程序时,它实际上会写入 Visual Studio 中的
Console
窗口。你每天都会学到新东西!