我有一个WPF应用程序,其中有一个文本块显示当前时间。该文本块绑定到ViewModel上的DependencyProperty。自然地,我需要不断更新时间,因此我使用了一个计时器(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");
}
问题在于,当回调被调用时,应用程序会退出...糟糕(输出显示:“在WindowsBase.dll中发生了类型为'System.InvalidOperationException'的第一次机会异常”,就在它要写入Time DP时)。
如果我使用DispatcherTimer,一切都正常。我不介意使用DispatcherTimer,只是这个应用程序相当大,我想尽可能地调整其性能。据我所见,我没有访问UI线程(我只是更新属性),因此不需要DispatcherTimer。
我错过了什么吗?
谢谢。
编辑: 属性定义如下:
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(""));
(日期相同)