【问题标题】:How do I create an automatic UI event trace in winforms?如何在 winforms 中创建自动 UI 事件跟踪?
【发布时间】:2009-01-22 15:31:37
【问题描述】:

我需要使用现有的 winforms 应用程序并进入事件跟踪模式,希望尽可能减少摩擦。

我希望将用户执行的每个操作都视为一个简单的堆栈跟踪:

MainForm.LaunchThing_Click
ThingWindow.NameInput_Focus
ThingWindow.NameInput_TextChanged
ThingWindow.AddressInput_Focus
ThingWindow.OKButton_Click

等等。

  • 如果这是一个 WPF 应用程序,我会在 ETW 中过滤所有 WClientInputMessage 类型的事件。
  • 我不能简单地转储堆栈跟踪,因为这不会捕获用户之前的操作。
  • 我可以为每个事件添加日志记录 [使用来自 this discussion 的推荐做法],但这是一个现有的应用程序, 事件太多。另外,我很懒。必须是更好的方法。
  • 我无法附加调试器,我希望将这些信息自动附加到来自现场测试用户的错误报告中,因为 [结果证明...] 没有人能准确地记住究竟是什么他们点击的东西的顺序是。

所以我想知道是否有人有任何好的技巧,可能使用子类化或反射来锁定 UI 事件。

性能并不是一个真正的问题。而且,如果我能参与到每一个事件中,那就足够了;我可以很容易地将它们过滤到相关的集合中。

【问题讨论】:

    标签: .net winforms user-interface logging events


    【解决方案1】:

    观察者模式怎么样?创建一个 EventLogger 类,其中包含一组执行日志记录的重载 Log 方法(每个事件方法签名一个)。在应用程序启动时实例化它并订阅每个 UI 事件。

    甚至应该可以通过反射自动进行订阅 - 尽管我认为对于任何大小合理的应用程序,设置它比手动进行订阅更费力。此外,您仍然必须确保您的 EventLogger 类对每个可能的事件处理程序方法签名都有一个 Log 方法。

    【讨论】:

    • 您的解决方案更简洁,+1。也许还可以在某处包含一个例程以自动附加到给定表单上的相关控件?
    • 嗯,这个应用程序的大小肯定是不合理的,所以我想我可以尝试让订阅自动进行。现在,这是一个足够好的开始!
    【解决方案2】:

    您有多少种不同的控件类型?如果您只有少数要跟踪的控件类型,则可能值得对它们进行子类化并在您的项目上进行查找和替换以将它们更改为您的子类。这应该只需要一两分钟。

    在您的子类控件中,您可以覆盖一小部分方法,在调用基方法之前添加跟踪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2022-06-23
      • 2017-11-16
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多