У меня есть приложение MVVM WPF, которое запускает некоторую логику в другом потоке, а затем, когда я хочу сделать обновление пользовательского интерфейса (скрыть основное окно), я вызываю метод Dispatcher.BeginInvoke()
и получаю следующую ошибку :Ошибка при вызове диспетчера из приложения WPF
"Must create DependencySource on same Thread as the DependencyObject".
Любые мысли?
Edit:
Следующий код работает в фоновом потоке (игнорировать уродливый код, так как это просто, чтобы продемонстрировать проблемы): В SomeWizardPage
конструктору я создаю новый экземпляр класса BitmapImage
и настройки это в свойство, связанное с пользовательским интерфейсом - вот что является причиной сбоя. Когда я комментирую инициализацию свойства изображения из конструктора, исключение не выбрасывается.
Main.CurrentViewModel = new SomeWizardPage();
if (Main.MainWindow.Dispatcher.CheckAccess())
{
}
else
{
Main.MainWindow.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
{
Main.MainWindow.Hide();
}));
}
Может кто-нибудь объяснить это поведение? Как я могу это решить?
ваше окно работает на другой поток (то есть другой диспетчер)? –
@ Dikla вам нужно показать код, вызывающий исключение – dkozl
Я добавил дополнительную информацию на свой вопрос - пожалуйста, посмотрите. Благодаря! – Dikla