Убедитесь, что обратный вызов таймера возвращается в главном потоке диспетчера.Если нет, то, скорее всего, вы получите исключение, когда попытаетесь закрыть окно из другого потока.
Используйте splash.Dispatcher.CheckAccess()
, чтобы убедиться, что вы находитесь в правильном потоке, а если нет, тогда используйте splash.Dispatcher.BeginInvoke((Action) () => splash.Close()
, чтобыотправить вызов на основной поток.
Проверьте эту страницу , чтобы узнать больше