我尝试延迟关闭App.xaml.ca中的窗口:
Window splash = new Window();
splash.Show();
Timer timer = new Timer(callback, null, 2000, Timeout.Infinite);
private void callback(object stateInfo)
{
splash.Close();
}
它工作正常,但整个应用程序正在关闭。这里有什么问题?
答案 0 :(得分:1)
请务必检查主调度程序线程上是否有计时器回调。如果没有,那么当您尝试从不同的线程关闭窗口时,您可能会遇到异常。
使用splash.Dispatcher.CheckAccess()
确保您在正确的线程上,如果没有,则使用splash.Dispatcher.BeginInvoke((Action) () => splash.Close()
将调用分派到主线程。
查看this page了解更多
答案 1 :(得分:0)
有不同的关闭模式,如果该窗口关闭且它是最后一个,则默认情况下应用程序将关闭。所以你可以看到它还有一些窗口,或者你可以通过将ShutdownMode
设置为适合你需要的东西来改变关闭行为。
e.g。
Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
答案 2 :(得分:0)
这是我对这个完全相同的问题的解决方案:
private async void CloseWindow()
{
await ClosingTasks();
}
private async Task ClosingTasks()
{
await Task.Delay(2000);
this.Close();
}
如果要在给定的2000 mS延迟后关闭当前窗口,只需调用CloseWindow()即可。