Class A includes a variable A to hold the status of an event that is triggered in Class C ( doEvent() ) The thread sleeps for 500 ms as it waits for Class B to kick off an Event which send the EventArg data back to Class C and calls an Event Handler UpdateClassVar(EventArgs e) - which is what it waits for