每秒刷新标签内容WPF

Bab*_*bad 10 c# wpf xaml

我正试图每秒刷新标签内容.所以我定义了两种方法如下.我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上的示例.