I have a WinForm project that I want to be usable as a console app if certain arguments are passed into it. Using some tips I read from here, I used the following code to m
It looks like there is no way around it: 1) If I want the output in console mode to behave like a dedicated console app, the console window must always be there. 2) If I want to hide the console when I run it in windowed mode, I will lose the blocking prints.
The above will work, but it won't allow you to write to the console which is maddening if you're trying to debug exceptions. To write to the console from a Win Forms app, you need to apply the code described here: http://www.codeissue.com/issues/i24e1ef8e5a93b4/run-windows-form-application-as-console-app-c.
Instead of this iffy method, you can accomplish this by just creating a winforms application and not displaying the main form if a certain argument is passed on the command line.
Since a console application doesn't need a message loop, you don't call Application.Run() when called in console mode.
So your Main() would be something like:
static void Main(params string[] args)
{
if (args.Length > 0 && args[0] == "consolemode")
{
// do stuff
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
I haven't tried this but I think it would work.
Maybe I've been doing it wrong but I've always done hybrids like this:
[STAThread]
public static int Main(string[] args)
{
if (args.Length > 0)
{
// run console code here
}
else
{
// start up the win form app
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
return 0;
}