为什么 DispatcherTimer 会立即启动而不是等到间隔出现?
Why does the DispatcherTimer start immediatly instead of waiting until the interval arise?
我想使用 DispatcherTimer 来决定用鼠标单击是单击还是双击。我在 this thread.
中使用 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
的构造函数是 the one that takes a number of ticks 作为参数。所以你基本上设置了 1000 个刻度的间隔,即 0.0001 秒,所以 似乎 立即调用回调,但事实并非如此。
您应该改用 TimeSpan.FromMilliseconds。
我想使用 DispatcherTimer 来决定用鼠标单击是单击还是双击。我在 this thread.
中使用 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
的构造函数是 the one that takes a number of ticks 作为参数。所以你基本上设置了 1000 个刻度的间隔,即 0.0001 秒,所以 似乎 立即调用回调,但事实并非如此。
您应该改用 TimeSpan.FromMilliseconds。