When defining an instance of MessageInterceptor that is going to handle the MessageReceived event, make sure that the instance is defined globally in the class where the event will be handled. If it is defined in a method, it will be up for garbage collection after it goes out of scope.
public class InterceptorClass
{
MessageInterceptor interceptor; // defined globally to class
private void Form1_Load(object sender, EventArgs e)
{
// MessageInterceptor interceptor; // This instance will go out of scope if defined here
interceptor = new MessageInterceptor(ruleName);
interceptor.MessageReceived += new MessageInterceptorEventHandler(interceptor_MessageReceived);
}
}