各位
我想要一个可以多次控制窗口打开和关闭的应用程序。比如按1,打开一个窗口;按 2,关闭窗口。
我找到了我的代码,它只能执行一次。
有人可以帮我改正吗?非常感谢。
public static void Main(string[] args)
{
var appthread = new Thread(new ThreadStart(() =>
{
app = new testWpf.App();
app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
app.Run();
}));
appthread.SetApartmentState(ApartmentState.STA);
appthread.Start();
while (true)
{
var key = Console.ReadKey().Key;
// press 1 to open
if (key == ConsoleKey.D1)
{
DispatchToApp(() => new Window().Show());
}
// Press 2 to exit
if (key == ConsoleKey.D2)
{
DispatchToApp(() => app.Shutdown());
}
}
}
static void DispatchToApp(Action action)
{
app.Dispatcher.Invoke(action);
}
最佳答案
当您通过调用 app.Shutdown()
关闭您的应用程序时,您需要先再次运行它以打开它的窗口。
您应该保存对窗口的引用并关闭它,而不是关闭整个应用程序。为此,您需要一个能够返回窗口引用的调度方法:
static void Main(string[] args)
{
var appthread = new Thread(new ThreadStart(() =>
{
app = new testWpf.App();
app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
app.Run();
}));
appthread.SetApartmentState(ApartmentState.STA);
appthread.Start();
Window win = new Window();
while (true)
{
var key = Console.ReadKey().Key;
// press 1 to open
if (key == ConsoleKey.D1)
{
win = DispatchToApp<Window>(() =>
{
var myWindow = new Window();
myWindow.Show();
return myWindow;
});
}
// Press 2 to exit
if (key == ConsoleKey.D2)
{
DispatchToApp(() => win.Close());
}
}
}
static TReturn DispatchToApp<TReturn>(Func<TReturn> action)
{
return app.Dispatcher.Invoke<TReturn>(action);
}
static void DispatchToApp(Action action)
{
app.Dispatcher.Invoke(action);
}
关于c# - 我如何在同一个程序/应用程序中重新打开 WPF 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304806/