首页 > 解决方案 > 为什么 DispatcherTimer 立即启动而不是等到间隔出现?

问题描述

我想使用 DispatcherTimer 来决定用鼠标单击是单击还是双击。我在这个线程中使用了 mm8 的解决方案。

我的测试代码是这个:

DispatcherTimer _myTimer = new DispatcherTimer();

public Constructor()
{
    _myTimer.Interval = new TimeSpan(1000);
    _myTimer.Tick += OnOneClickTick;
}

private void OnPreviewMouseLeftButtonDownCommand(MouseButtonEventArgs e)
{
    try
    {
        if(e.ClickCount == 2)
        {
            _myTimer.Stop();
            string dummy = "";
        }
        else
        {
            _myTimer.Start();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("error");
    }
}

private void OnOneClickTick(object sender, System.EventArgs e)
{
    _myTimer.Stop();
    string dummy = "";
}

这个想法是,当我单击一次时,启动计时器,但还没有执行,只需等待第二次单击,如果没有发生,则运行 itmer 处理程序,如果发生,停止计时器,所以它不会被执行的计时器。

但是,当我在单击鼠标事件中启动计时器时,计时器处理程序会立即执行。我认为计时器处理程序的代码将在间隔出现后执行,在 1 秒后(1 秒有时间测试它是否有效,稍后 250 毫秒是一个很好的间隔)。

这是为什么?

标签: c#dispatchertimer

解决方案


TimeSpan您正在使用的构造函数是将多个刻度作为参数的构造函数。因此,您基本上设置了 1000 个刻度的间隔,即 0.0001 秒,因此似乎立即调用了回调,但事实并非如此。

您应该改用TimeSpan.FromMilliseconds


推荐阅读