【问题标题】:Accurately timing user interaction in a WPF window在 WPF 窗口中准确计时用户交互
【发布时间】:2011-10-16 12:40:25
【问题描述】:

我需要对 WPF 窗口中两个 GUI 事件之间的时间间隔进行计时 - 特别是 Button_Click 事件和 Canvas_MouseLeftButtonDown 事件之间的时间。我正在使用对System.Diagnostics.Stopwatch 的调用来测量此间隔。虽然 Stopwatch 类在内部非常精确(与 DateTime.Now 等较低分辨率的替代品相反),但我假设 GUI 引发的事件之间存在相对较大的粒度,按照帧速率的倒数顺序(但仍然非常在人类规模上很短)但是对于非常快速的点击(我可以管理的最好显然是 50 毫秒),假设的 GUI 事件延迟可能很重要。有谁知道这个粒度是什么,只是为了建立误差线和有效数字?

【问题讨论】:

    标签: .net wpf events stopwatch


    【解决方案1】:

    您可以设置使用SendInput 将鼠标点击发送到GUI 的东西。比如:

    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 的方法在单独的线程上执行。

    【讨论】:

    • @ Jim Mischel - 我会试一试,谢谢。或者,我怀疑我还可以通过查看MouseHover 事件在 MouseHoverTime 设置为 0 时的触发速度来确定 GUI 侦听器速率。
    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多