Как отложить закрытие окна в 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;
Другие вопросы по тегам