准确计算WPF窗口中的用户交互

时间:2011-07-30 12:51:58

标签: .net wpf events stopwatch

我需要计算WPF窗口中两个GUI事件之间的时间间隔 - 具体来说,是Button_Click事件和Canvas_MouseLeftButtonDown事件之间的时间。我正在使用System.Diagnostics.Stopwatch来调用此间隔。虽然秒表类在内部非常精确(与DateTime.Now等较低分辨率的替代方案相反),但我认为GUI引发的事件之间的粒度相对较大,大约是帧速率的倒数(但是然而,对于非常快速的点击(我可以管理的最好的显然是50毫秒),假设的GUI事件延迟可能很重要。有谁知道这个粒度是什么,仅仅是为了建立误差线和重要数字?

1 个答案:

答案 0 :(得分:1)

您可以设置使用SendInput向鼠标点击发送内容的内容。类似的东西:

Initialize manual reset event
Start stopwatch_1
Send mouse click
wait for event
Get elapsed time of stopwatch_1

在您的事件处理程序中:

Get elapsed time of stopwatch_1
set event

基本上,通过单击按钮开始测试,让它延迟几秒钟,以便您可以将鼠标悬停在要单击的按钮上。

在事件处理程序中读取时间将告诉您在收到的点击和正在执行的处理程序之间有多少延迟。最后一次读取是由于事件处理程序不执行任何操作所需的总耗用时间,应该是总开销。减去处理事件所需的时间。

请注意,您不希望在GUI线程上执行等待。您需要在单独的线程上执行调用SendInput的方法。