Output Console.WriteLine from WPF Windows Applications to actual console
Solution 1:
After digging up a bit, I found this answer. The code is now:
namespace WpfConsoleTest
{
public partial class App : Application
{
[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);
protected override void OnStartup(StartupEventArgs e)
{
AttachConsole(-1);
Console.WriteLine("Start");
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Stop");
Shutdown(0);
}
}
}
Calling the exe directly still has a nasty side effect, connected with the call returning immediately:
C:\test>WpfConsoleTest.exe
C:\test>Start
Stop
^^^^
The cursor will stay here waiting for the user to press enter!
The solution is, once again, to use start:
C:\test>start /wait WpfConsoleTest.exe
Start
Stop
Thanks for input!
Solution 2:
What I've done in the past is to make it a console application and call P/Invoke to hide the app's associated Console window once I've shown my WPF Window:
//added using statements per comments...
using System.Diagnostics;
using System.Runtime.InteropServices;
internal sealed class Win32
{
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public static void HideConsoleWindow()
{
IntPtr hWnd = Process.GetCurrentProcess().MainWindowHandle;
if (hWnd != IntPtr.Zero)
{
ShowWindow(hWnd, 0); // 0 = SW_HIDE
}
}
}