Как отложить закрытие окна в WPF
Я пытаюсь отложить закрытие окна в моем 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();
}
Он работает нормально, но все приложение закрывается. Что я здесь не так делаю?
3 ответа
Убедитесь, что обратный вызов таймера возвращается в главном потоке диспетчера. Если нет, то вы, скорее всего, получите исключение при попытке закрыть окно из другого потока.
использование splash.Dispatcher.CheckAccess()
чтобы убедиться, что вы на правильном пути, а если нет, то используйте splash.Dispatcher.BeginInvoke((Action) () => splash.Close()
направить звонок в основной поток.
Проверьте эту страницу для более
Вот мое решение этой точно такой же проблемы:
private async void CloseWindow()
{
await ClosingTasks();
}
private async Task ClosingTasks()
{
await Task.Delay(2000);
this.Close();
}
Где вы просто вызываете CloseWindow(), когда хотите закрыть текущее окно после заданной задержки 2000 мс.
Существуют различные режимы выключения, если это окно закрыто и оно является последним, то приложение будет закрыто по умолчанию. Таким образом, вы можете либо убедиться, что все еще есть какое-то окно, либо изменить поведение выключения, установив ShutdownMode
к чему-то, что соответствует вашим потребностям.
например
Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;