如何使用计时器显示内容?

时间:2010-12-04 05:35:17

标签: c# wpf timer

我遇到了让计时器更改窗口内容的问题。

我通过以下方式初始化我的计时器:

timeOutTimer = new System.Timers.Timer(15000);
            timeOutTimer.Elapsed += new ElapsedEventHandler(timeOutEvent);
            timeOutTimer.Enabled = true;
            timeOutTimer.AutoReset = false;
            timeOutTimer.Start();

我有一个隐藏的ContentControl。

当计时器超过15秒时,它应该改变ContentControl的可见性

private void timeOutEvent(object sender, ElapsedEventArgs e)
{
    TicketContent.Visibility = Visibility.Visible;
    Console.WriteLine("TIMED OUT");
    timeOutTimer.Stop();

}

我得到一个例外: System.InvalidOperationException

我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:0)

启动计时器时,它从一个单独的非UI线程开始。由于它位于单独的线程中,因此无法访问UI线程中的元素。委托与Dispatcher.BeginInvoke()方法结合使用,可以修改UI元素的属性。

    private void timeOutEvent(object sender, ElapsedEventArgs e)
    {
        TicketContent.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new InvokeDelegate(TimeOutEvent));
        Console.WriteLine("TIMED OUT");
        timeOutTimer.Stop();
    }

    public delegate void InvokeDelegate();


    private void TimeOutEvent()
    {
        TicketContent.Visibility = Visibility.Visible;
    }

答案 1 :(得分:0)

为什么不使用DispatcherTimer

timer = new DispatcherTimer(
    TimeSpan.FromSeconds(15), 
    DispatcherPriority.Background, 
    TimeoutEvent, 
    this.Dispatcher);

timer.Start();