This post shows you how to output data to a Console in a Windows Forms Application. I use this technique religiously when developing Windows Forms applications. Debugging is much simpler when you can see information on what your application is doing in a Console. Of course the onus is on you as developer to output data which will help you.
In this post I will use a simple Windows Forms application which adds two numbers.

By default a Windows Forms application does not output to a Console even if you write a Console.Write() or Console.WriteLine(). This shortcoming can be addressed by using Win32 API. In your Windows Forms application you can declare a class which provides a wrapper around Win32 functions.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Win32 { /// <summary> /// Allocates a new console for current process. /// </summary> [DllImport("kernel32.dll")] public static extern Boolean AllocConsole(); /// <summary> /// Frees the console. /// </summary> [DllImport("kernel32.dll")] public static extern Boolean FreeConsole(); } |
A Console must be started to accept input and display our messages. This can be done by calling Win32.AllocConsole() function. For my example I will start the console in my form’s constructor.
|
1 2 3 4 5 6 7 8 |
public Form1() { InitializeComponent(); Win32.AllocConsole(); } |
Now when I write to Console, I will see data appear in the console window which was started in my constructor.
|
1 2 3 4 5 6 7 8 9 |
private void Add(int num1, int num2) { int result = num1 + num2; Console.WriteLine( string.Format("{0} + {1} = {2}", num1, num2, result)); } |

As a good practice you should also close the console window by calling Win32.FreeConsole() method before your application exits.






Thanks for the tip. Too bad Console.Clear does not work under Vista although works fine under XP.
Thanks, just what I needed
Thanks Ed. I’m glad that you found this article helpful.
It is great. Very helpful
Thank you.
It worked.
Thanks !
Thank you for publishing this solution. I have tried several different offered solution and yours is the only one the worked the very first time. Great job!
Bob, Thanks for your motivating comment.
This worked for me after I added
using System.Runtime.InteropServices;
Thanks for the how-to.
You, sir, deserve a medal.
I’ve been to 5 different sites where people invent the most cumbersome and enormous code to accomplish what you did in a simple and elegant manner.
Thank you.
Also thanks to pgn674 for the useful comment.
OMFG, thanks and I gladly accept the medal
Thanks Deepak, good work
Guys can someone transfer this to c++ ?
When closing the allocated console it causes the termination of the main application.
Is there a way to prevent it?
Thanks~very useful~~
Big Thanks To the Author: It’s a very comprehensive and useful article (that probably saved me a lot of time)
Thank you Konstantin an Wei for your comments. I am glad that this post was useful.