我需要使用现有的winforms应用程序并进入事件跟踪模式,希望尽可能少的摩擦。
我希望看到用户采取的每个操作都是一个简单的堆栈跟踪内容:
MainForm.LaunchThing_Click
ThingWindow.NameInput_Focus
ThingWindow.NameInput_TextChanged
ThingWindow.AddressInput_Focus
ThingWindow.OKButton_Click
等等。
所以我想知道是否有人有任何好的技巧,或许使用子类或反射来锁定UI事件。
性能并不是真正的问题。如果我能在每个事件中得到一个钩子,那就足够了;我可以很容易地将它们过滤到相关的集合中。
答案 0 :(得分:2)
观察者模式怎么样?创建一个EventLogger类,其中包含一组执行日志记录的重载Log方法(每个事件方法签名一个)。在应用程序启动时实例化它并将其订阅到每个UI事件。
甚至可以通过反射自动进行订阅 - 尽管我认为设置它比为任何合理大小的应用程序手动执行更加努力。此外,您仍然必须确保您的EventLogger类具有每个可能的事件处理程序方法签名的Log方法。
答案 1 :(得分:0)
您有多少种不同的控制类型?如果您只想要跟踪一些控件类型,则可能需要对它们进行子类化并对项目执行查找和替换以将其更改为子类。这应该只需要一两分钟。
在子类控件中,您可以覆盖方法的一小部分,在调用基本方法之前添加跟踪。