我正试图每秒刷新标签内容.所以我定义了两种方法如下.我startStatusBarTimer()
在我的构造函数中使用Window
.
代码:
private void startStatusBarTimer()
{
System.Timers.Timer statusTime = new System.Timers.Timer();
statusTime.Interval = 1000;
statusTime.Elapsed += new System.Timers.ElapsedEventHandler(statusTimeElapsed);
statusTime.Enabled = true;
}
private void statusTimeElapsed(object sender, ElapsedEventArgs e)
{
lblNow.Content = DateTime.Now.ToString("yyyy/MM/dd");
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
调用线程无法访问此对象,因为另一个线程拥有它.
怎么了?或者我该怎么办?
Roh*_*ats 13
您正面临线程关联问题.由于调用了elapsed事件background thread
,因此无法从后台线程访问UI控件.您需要执行操作UI dispatcher
以便将其分派到UI线程 -
private void statusTimeElapsed(object sender, ElapsedEventArgs e)
{
App.Current.Dispatcher.Invoke((Action)delegate
{
lblNow.Content = DateTime.Now.ToString("yyyy/MM/dd");
});
}
Run Code Online (Sandbox Code Playgroud)
要么
您可以使用DispatcherTimer
专门为此目的而构建的.您可以从其Tick
事件处理程序访问UI控件.请参阅MSDN上的示例.
归档时间: |
|
查看次数: |
9578 次 |
最近记录: |