Как создать автоматическую трассировку событий пользовательского интерфейса в winforms? - PullRequest
1 голос
/ 22 января 2009

Мне нужно взять существующее приложение winforms и перейти в режим трассировки событий , с надеждой на как можно меньшее трение.

Я бы хотел видеть каждое действие, которое пользователь выполняет, как простую трассирующую вещь:

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

и т. Д.

  • Если бы это было приложение WPF, я бы сделал что-то вроде фильтрации всех событий типа WClientInputMessage в ETW.
  • Я не могу просто сбросить трассировку стека, потому что она не фиксирует предыдущие действия пользователя.
  • Я мог бы добавить ведение журнала к каждому отдельному событию [с рекомендациями этого обсуждения ], но это существующее приложение с далеко слишком большим количеством событий. Плюс я ленивый. Должен быть лучше.
  • Я не могу прикрепить отладчик, я хочу автоматически прикрепить эту информацию к отчетам об ошибках от тестирования пользователей на местах, потому что [получается ...] никто не может точно вспомнить, что именно последовательность действий, на которую они нажали, была.

Так что мне интересно, есть ли у кого-нибудь хорошие приемы, возможно, с использованием подклассов или рефлексии, чтобы привязаться к событиям пользовательского интерфейса.

Производительность на самом деле не проблема. И если я могу подключиться к каждому событию, этого достаточно; Я могу довольно легко отфильтровать их до соответствующего набора.

Ответы [ 2 ]

2 голосов
/ 22 января 2009

Как насчет модели наблюдателя? Создайте класс EventLogger с кучей перегруженных методов Log (по одному на каждую сигнатуру метода события), которые выполняют ведение журнала. Создайте его при запуске приложения и подпишитесь на каждое из событий пользовательского интерфейса.

Должно быть даже возможно сделать подписку автоматически с отражением - хотя я думаю, что это будет более трудоемко настроить, чем сделать это вручную для любого приложения разумного размера. Также вам все равно придется убедиться, что в вашем классе EventLogger есть метод Log для каждой возможной сигнатуры метода обработчика событий.

0 голосов
/ 22 января 2009

Сколько у вас разных типов управления? Если у вас есть только несколько типов элементов управления, которые вы хотите отследить, может оказаться целесообразным создать их подклассы и выполнить поиск и замену в вашем проекте, чтобы изменить их на свой подкласс. Это займет всего минуту или две.

В ваших подклассах управления вы можете переопределить небольшой раздел методов, добавив трассировку перед вызовом базового метода.

...