У меня есть приложение WPF с текстовым блоком, который отображает текущее время. Указанный текстовый блок привязан к DependencyProperty в ViewModel. Естественно, мне нужно постоянно обновлять время, поэтому я использовал таймер (System.Threading.Timer) примерно так:
public MainViewModel()
{
_dateTimer = new Timer(_dateTimer_Tick, null, 0, 60000);
}
void _dateTimer_Tick(object sender)
{
Time = DateTime.Now.ToString("HH:mm");
Date = DateTime.Now.ToString("D");
}
Дело в том, что когда вызывается обратный вызов, приложение закрывается ... bummer (вывод говорит: «Первое случайное исключение типа« System.InvalidOperationException »произошло в WindowsBase.dll», когда он собирался записать в Время DP).
Если я использую DispatcherTimer, все работает нормально. Я не возражаю против использования DispatcherTimer, просто приложение довольно большое, и я хотел настроить его производительность как можно лучше. Насколько я вижу, я не обращаюсь к потоку пользовательского интерфейса (я просто обновляю свойство), поэтому DispatcherTimer не понадобится.
Я что-то упустил?
Спасибо.
EDIT:
Свойства определены так:
public string Time
{
get { return (string)GetValue(TimeProperty); }
set { SetValue(TimeProperty, value); }
}
// Using a DependencyProperty as the backing store for Time. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TimeProperty =
DependencyProperty.Register("Time", typeof(string), typeof(MainViewModel), new UIPropertyMetadata(""));
(Дата такая же)