Click here to Skip to main content
11,634,815 members (68,266 online)
Click here to Skip to main content

EventSpy

, 9 Oct 2005 67.4K 2K 102
Rate this:
Please Sign up or sign in to vote.
Sick and tired of writing diagnostic event handlers to see when a control is firing events? You need EventSpy!

Sample Image - eventspy.jpg

Introduction

Recently I was writing an application that used two RichTextBoxes next to each other, and I wanted them to scroll simultaneously, but the Scroll events weren't appearing to fire! After 10 minutes of documentation reading I thought, wouldn't it be better if I had a tool that told me when events fired? That's when I started to research EventSpy.

I started off with a bit of reflection, looping through the events of an object and building and linking a System.EventHandler for every event; this worked, but it threw a nasty error if the event wasn't using a System.EventHandler.

foreach (EventInfo info in t.GetEvents())
{
   info.AddEventHandler(new System.EventHandler(this.EventHandler));
}

So then I went onto using a completely different method. For each event in the object, EventSpy using Code DOM to spit out a custom event handler code for each event. This allowed me to also capture specialist EventHandlers such as MouseMoveEventHandler. Once custom event handling code has been spat out by Code DOM, EventSpy then compiles the class in memory, and links it up with the object it is spying on. I found this to be a really nifty solution, as it's still very fast but allows me to see all that's going on with the object.

The Code

EventSpy is implemented as a single DLL. Even though it is implemented as a DLL you should only use EventSpy during development. Unfortunately I could not come up with a good enough way to have EventSpy as a standalone exe, so I did the next best thing, two lines of code. Here is some sample code on how to use EventSpy, this just spies on a very basic class that throws an event. EventSpy can be used on any object, such as a textbox, a button or a custom business class.

public class Dummy
{
    public delegate void DummyEventHandler(string something);
    public event DummyEventHandler DummyEvent;

    public void RaiseEvent()
    {
        if (DummyEvent != null)
            DummyEvent("Hello World!");
    }
}

EventSpy.EventListener listener = new EventSpy.EventListener();
Dummy dummy = new Dummy();

listener.AttachTo(dummy);

dummy.RaiseEvent();

After the listener.AttachTo line, the main EventSpy window will pop up, with a list of events that have occurred, and you may filter out events that you don't want to spy on, or view what was passed in the events parameters. Very cool if you ask me, it's saved me loads of time on Windows Forms development.

License

You may use EventSpy however you like, just give me a bit of credit. If people are interested in helping improve EventSpy, then drop me a line and we could get a SourceForge project going. EventSpy definitely needs a code cleanup, I'll get that done ASAP, I kind of rushed EventSpy so that I could get using it!

History

  • 2005-09-10 - Original article posted.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Martin Carolan
United Kingdom United Kingdom
No Biography provided

You may also be interested in...

Comments and Discussions

 
QuestionCan it trace event from C++ app control? Pin
udomnoke21-Aug-08 5:53
memberudomnoke21-Aug-08 5:53 
GeneralLoad the eventSpy in Debug with Late binding Pin
Suicide204-Jun-07 19:17
memberSuicide204-Jun-07 19:17 
GeneralOther implementation available Pin
DenisK17-Oct-05 22:17
memberDenisK17-Oct-05 22:17 
GeneralDebug one application from another one Pin
canozurdo15-Oct-05 5:44
membercanozurdo15-Oct-05 5:44 
GeneralRe: Debug one application from another one Pin
Harm Salomons23-Oct-05 9:55
memberHarm Salomons23-Oct-05 9:55 
Questionsomething missing? Pin
Harm Salomons14-Oct-05 11:21
memberHarm Salomons14-Oct-05 11:21 
AnswerRe: something missing? Pin
Anonymous14-Oct-05 12:55
sussAnonymous14-Oct-05 12:55 
QuestionI am interested in your project. Pin
Woo Seok Seo9-Oct-05 23:56
memberWoo Seok Seo9-Oct-05 23:56 
AnswerRe: I am interested in your project. Pin
Anonymous10-Oct-05 7:47
sussAnonymous10-Oct-05 7:47 
GeneralHappy birthday! Pin
Xirius10-Oct-05 20:35
memberXirius10-Oct-05 20:35 
GeneralRe: Happy birthday! Pin
Martin Carolan11-Oct-05 5:54
memberMartin Carolan11-Oct-05 5:54 
GeneralThe idea is awesome Pin
Robert Rohde9-Oct-05 11:40
memberRobert Rohde9-Oct-05 11:40 
GeneralRe: The idea is awesome Pin
Martin Carolan9-Oct-05 11:42
memberMartin Carolan9-Oct-05 11:42 
GeneralThank you Pin
Martin Carolan9-Oct-05 10:39
memberMartin Carolan9-Oct-05 10:39 
GeneralRe: Thank you Pin
mwdiablo9-Oct-05 16:03
membermwdiablo9-Oct-05 16:03 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150728.1 | Last Updated 9 Oct 2005
Article Copyright 2005 by Martin Carolan
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid