2009-01-22 64 views
1

我需要采取现有的Winforms应用程序并放入事件跟踪模式,希望尽可能少摩擦。如何在winforms中创建自动UI事件跟踪?

我希望看到的每一个动作,用户需要一个简单的堆栈跟踪前瞻性的事情:

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

等。

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

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

表现不是真正的问题。如果我能够在每一场比赛中获得一席之地,那就够了。我可以很容易地将它们过滤到相关集。

回答

2

观察者模式如何?使用一堆重载的Log方法创建一个EventLogger类(每个事件方法签名一个)来执行日志记录。在应用程序启动时将其实例化,并将其订阅到每个UI事件。

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

+0

您的解决方案更加清洁,+1。也许还可以在某个地方包含一个例程来自动附加到给定表单上的相关控件? – 2009-01-22 16:22:52

0

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

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