Метод считывания свойства для RootVisual на Классе приложений имеет проверку потока, которая вызывает то исключение. Я обошел это путем хранения диспетчера корневого visual в моем собственном свойстве в моем App.xaml.cs:
public static Dispatcher RootVisualDispatcher { get; set; }
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new Page();
RootVisualDispatcher = RootVisual.Dispatcher;
}
Если Вы затем называете BeginInvoke на Приложении. RootVisualDispatcher, а не Приложение. Текущий. RootVisual. Диспетчер Вы не должны получать это исключение.
Я столкнулся с подобной проблемой, но это было в формах Windows:
У меня есть класс, у которого есть собственный поток, обновляющий статистику другого процесса, есть элемент управления в мой пользовательский интерфейс, привязанный к этому объекту. У меня возникли проблемы с вызовами между потоками, вот как я их решил:
Form m_MainWindow; //Reference to the main window of my application
protected virtual void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
if(m_MainWindow.InvokeRequired)
m_MainWindow.Invoke(
PropertyChanged, this, new PropertyChangedEventArgs(propertyName);
else
PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
}
Кажется, это отлично работает, если у кого-то есть предложения, дайте мне знать.
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => {...});
Также посмотрите здесь.