c# - 为什么 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 毫秒是一个很好的间隔)。
这是为什么?
解决方案
TimeSpan
您正在使用的构造函数是将多个刻度作为参数的构造函数。因此,您基本上设置了 1000 个刻度的间隔,即 0.0001 秒,因此似乎立即调用了回调,但事实并非如此。
推荐阅读
- android - 使用 React Native Animated 在 Android 上消失的 React Native 动画图像
- html - 显示:flex 采用图像高度但在添加文本时溢出
- reactjs - npm install 给我们一个依赖树错误
- kotlin - 过滤器kotlin内的条件最大值
- git - 用于同步更改的 VSCode 快捷方式
- javascript - 如何在 pug 文件中呈现数组参数
- reactjs - 迭代渲染组件时,使组件的状态影响同级组件的渲染
- c# - RijndaelManaged 在 .NET Core 上使用 256 键
- javascript - 如何通过 Ajax 提交表单并使用 php 处理它?
- laravel - Mac OS 更新后 Homestead ERR_SOCKET_NOT_CONNECTED