I want to open a WPF Window from a Console application. After referring to this post, it works fine.
The problem is: When the user closed the WPF Window (manually), it can no long be re-opened from the Console, throwing the exception message: “Cannot create more than one System.Windows.Application instance in the same AppDomain.”
Here is the code:
class Program
{
static void Main(string[] args)
{
string input=null;
while ((input = Console.ReadLine()) == "y")
{
//Works fine at the first iteration,
//But failed at the second iteration.
StartWpfThread();
}
}
private static void OpenWindow()
{
//Exception(Cannot create more than one System.Windows.Application instance in the same AppDomain.)
//is thrown at the second iteration.
var app = new System.Windows.Application();
var window = new System.Windows.Window();
app.Run(window);
//User closes the opened window manually.
}
private static void StartWpfThread()
{
var thread = new Thread(() =>
{
OpenWindow();
});
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = false;
thread.Start();
}
}
How can I re-open the WPF Window?
You should not create the application together with the window but only once separately, also make sure that it does not exit after the window is closed by setting the
ShutdownModerespectively, e.g.Also if you want to re-open the very same window make sure it is never closed completely, to do that you can handle the
Closingevent and cancel it usinge.Cancel = true;, then just callHideon the window to “close” it andShowto “open” it again later.