Я пишу игрушечное приложение для Магазина Windows для Windows 8. У него всего одна страница xaml с TextBlock
.Страница имеет класс MyTimer как DataContext
:
this.DataContext = new MyTimer();
MyTimer
реализует INotifyPropertyChanged
, а обновление свойства Time
выполняется с помощью таймера:
public MyTimer(){
TimerElapsedHandler f = new TimerElapsedHandler(NotifyTimeChanged);
TimeSpan period = new TimeSpan(0, 0, 1);
ThreadPoolTimer.CreatePeriodicTimer(f, period);
}
с
private void NotifyTimeChanged(){
if (this.PropertyChanged != null){
this.PropertyChanged(this, new PropertyChangedEventArgs("Time"));
}
}
TextBlock
имеет привязку данных по времени
<TextBlock Text="{Binding Time}" />
Когда я запускаю приложение, у меня возникает следующее исключение:
System.Runtime.InteropServices.COMException was unhandled by user code
Ссообщение
The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
Реальная проблема в том, что я обновляю свойство класса MyTimer, а не сам графический интерфейс, я не могу понять это, но я думаю, что решениеследует использовать что-то вроде этот .