DispatcherTimer勾选一次

JL.*_*JL. 21 wpf

我基本上希望调度程序计时器对象只执行一次.

所以我有基本代码:

DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 4);
dispatcherTimer.Start();
Run Code Online (Sandbox Code Playgroud)

然后在click事件中:

private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            this.Visibility = System.Windows.Visibility.Visible;
            // Now stop timer execution.. or kill the timer object
        }
Run Code Online (Sandbox Code Playgroud)

如何在执行后停止计时器或终止对象?

JL.*_*JL. 39

private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            this.Visibility = System.Windows.Visibility.Visible;
            (sender as DispatcherTimer).Stop();
        }
Run Code Online (Sandbox Code Playgroud)


Vla*_*den 23

这是使用lambda表达式的替代代码:

var timer = new DispatcherTimer {Interval = TimeSpan.FromSeconds(4)};
timer.Tick += (sender, args) => 
{
    this.Visibility = System.Windows.Visibility.Visible;
    timer.Stop();
};

timer.Start();
Run Code Online (Sandbox Code Playgroud)

  • @Cameron,根将通过调度员.调度程序保留所有已启动计时器的列表,计时器具有匿名函数的引用.一旦停止,调度程序将释放其引用,这允许计时器和匿名函数进行GC. (3认同)

Mar*_*ark 6

private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            this.Visibility = System.Windows.Visibility.Visible;
            var dispatcherTimer = (DispatcherTimer)sender;
            dispatcherTimer.Stop();
        }     
Run Code Online (Sandbox Code Playgroud)