使用计时器更改WPF中的可见性

时间:2009-10-07 20:19:15

标签: wpf multithreading timer

我有一个应用程序需要使用计时器切换某些控件的可见性。每5秒钟,一些控件会消失而另一些控件会出现。当我使用计时器时,它表示无法更改可见性,因为计时器线程不是控件的所有者。

我们如何绕过它?

韩国社交协会

3 个答案:

答案 0 :(得分:6)

只需使用DispatcherTimer即可。每个tick上调用的代码都会自动在UI线程上运行。

例如。 (来自MSDN)

//  DispatcherTimer setup
var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,5);
dispatcherTimer.Start();

//  System.Windows.Threading.DispatcherTimer.Tick handler
//
//  Updates the current seconds display 
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    // Updating the Label which displays the current second
    lblSeconds.Content = DateTime.Now.Second;
}

答案 1 :(得分:3)

使用Dispatcher将其编组回UI线程,或者您可能想考虑使用动画?在Blend中设置时间轴以完全在XAML中完成此操作非常简单。

答案 2 :(得分:2)

您可以使用SynchronizationContext.PostDispatcher.Invoke将UIElement.Visible属性设置回UI线程。

这可以像下面这样简单:

App.SynchronizationContext.Post(new SendOrPostCallback((state) =>
    {
         theControl.Visible = Visibilty.Visible;
    }), null);