如何使用线程来"勾选"其他线程访问的计时器?

2 c# wpf multithreading touch

当用户做某事(触摸StackPanel,在这种情况下),我需要开始某种类型的计时器(可能是DispatcherTimer,因为我在WPF中工作),如果在一定时间内再次发生另一次触摸,那么我我会叫一个方法.你可能猜到 - 这是实现双击功能.

我假设实现这一目标的最佳方法是使用线程(即子线程增加一个时间跨度,可以在任何时候再次触摸StackPanel时由主线程检查?)

谢谢,

Ric*_*lly 6

您不需要启动另一个线程来执行此操作.

只需要记录第一次点击发生的时间戳并使用它.然后,您可以通过从当前时间减去此时间来计算时间跨度:

private DateTime _lastTap;
public void TapHandler()
{
  DateTime now = DateTime.UtcNow;
  TimeSpan span = now - lastTap;
  _lastTap = now;
  if (span < TimeSpan.FromSeconds(1)) {...}
}
Run Code Online (Sandbox Code Playgroud)

或者,正如@DannyVarod所建议的那样,您可以使用a Stopwatch来实现相同的结果(但具有更准确的时序):

private Stopwatch _stopwatch = new Stopwatch();
public void TapHandler()
{
  TimeSpan elapsed = _stopwatch.Elapsed;
  _stopwatch.Restart();
  if (elapsed < TimeSpan.FromSeconds(1)) {...}
}
Run Code Online (Sandbox Code Playgroud)