我有一个应用程序需要使用计时器切换某些控件的可见性。每5秒钟,一些控件会消失而另一些控件会出现。当我使用计时器时,它表示无法更改可见性,因为计时器线程不是控件的所有者。
我们如何绕过它?
韩国社交协会
答案 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.Post
或Dispatcher.Invoke
将UIElement.Visible属性设置回UI线程。
这可以像下面这样简单:
App.SynchronizationContext.Post(new SendOrPostCallback((state) =>
{
theControl.Visible = Visibilty.Visible;
}), null);