c# - 为什么这个 C# 计时器代码不起作用?

标签 c# timer

我需要能够为我正在编写的应用程序一次禁用一个按钮 1.5 秒。显示一个图像,用户单击一个按钮,然后显示另一个图像。我需要确保用户不会太快再次点击按钮。

所以,当显示图像时,我调用这个函数:

    //when a new image is displayed, start the timer and disable the 'done' button
    //for 1.5 seconds, to force people to stop pressing next so quickly
    System.Timers.Timer mTimer;
    void TimerStart() {
        Done.IsEnabled = false;

        mTimer = new System.Timers.Timer();
        mTimer.Interval = 1500;
        mTimer.Start();
        mTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimerEnd);
    }

TimerEnd 代码如下:

    void TimerEnd(object sender, EventArgs eArgs) {
        if (sender == mTimer){
            Done.IsEnabled = true;
            mTimer.Stop();
        }
    }

“Done.IsEnabled”行被点击,但按钮没有重新启用,计时器也没有停止触发。我在这里做错了什么?如果重要的话,这是一个 WPF 应用程序。

最佳答案

改为使用 DispatcherTimer

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(someInterval);
timer.Tick += new EventHandler(someEventHandler);
timer.Start();

private void someEventHandler(Object sender, EventArgs args)
{
//some operations
//if you want this event handler executed for just once
// DispatcherTimer thisTimer = (DispatcherTimer)sender;
// thisTimer.Stop();
}

关于c# - 为什么这个 C# 计时器代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463461/

相关文章:

c# - 可以禁止子类定义类吗?

c# - 我是否开始使用 C# 错误实践路径,为事件日志创建单独的类?

java - 如何在一定时间后停止计时器?

android - 声音互相抵消了吗?

javascript - 暂停/恢复在nodejs中执行的代码

java - java中的计时器,速度降低

c# - 如何防止 CPU : Synchronous method calling multiple workers asynchronously & throttling using SemaphoreSlim? 的 "maxing out"

c# - 如何使用 MSBuild NuGet 将 .csproj 文件加载到 .NET Core 3.0 中

C# 语法和符号

java - Java程序中的定时器,倒计时