如何在winforms中创建自动UI事件跟踪?

时间:2009-01-22 15:31:38

标签: .net winforms user-interface logging events

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

我希望看到用户采取的每个操作都是一个简单的堆栈跟踪内容:

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

等等。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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