Изменение видимости в WPF с таймером - PullRequest
0 голосов
/ 08 октября 2009

У меня есть приложение, в котором мне нужно переключать видимость некоторых элементов управления с помощью таймера. Каждые 5 секунд некоторые элементы управления исчезают, а другие появляются. Когда я использовал таймер, он говорит, что не может изменить видимость, потому что поток таймера не является владельцем элемента управления.

Как мы можем обойти это?

Tks

Ответы [ 3 ]

6 голосов
/ 08 октября 2009

Просто используйте DispatcherTimer . Код, вызываемый на каждом тике, автоматически запускается в потоке пользовательского интерфейса.

например. (из 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;
}
3 голосов
/ 08 октября 2009

Либо используйте Dispatcher , чтобы перенаправить его обратно в поток пользовательского интерфейса, либо вы можете вместо этого рассмотреть возможность использования анимации? Было бы очень просто настроить временную шкалу в Blend, чтобы сделать это полностью в XAML.

2 голосов
/ 08 октября 2009

Вы можете использовать SynchronizationContext.Post или Dispatcher.Invoke для маршалинга свойства UIElement.Visible, установленного обратно в поток UI.

Это может быть так просто, как что-то вроде:

App.SynchronizationContext.Post(new SendOrPostCallback((state) =>
    {
         theControl.Visible = Visibilty.Visible;
    }), null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...