Обозначения:
if ( MyEvent != null ) {
MyEvent( param1, param2 );
}
не является поточно-ориентированным. Вы должны сделать это так:
EventHandler handler = this.MyEvent;
if ( null != handler ) { handler( param1, param2 ); }
Я понимаю, что это беспокоит, поэтому вы можете сделать вспомогательный метод:
static void RaiseEvent( EventHandler handler, object sender, EventArgs e ) {
if ( null != handler ) { handler( sender, e ); }
}
, а затем позвоните:
RaiseEvent( MyEvent, param1, param2 );
Если вы используете C # 3.0, вы можете объявить вспомогательный метод как метод расширения:
static void Raise( this EventHandler handler, object sender, EventArgs e ) {
if ( null != handler ) { handler( sender, e ); }
}
, а затем позвоните:
MyEvent.Raise( param1, param2 );
Также вы можете создавать следующие методы расширения / помощника для других обработчиков событий. Например:
static void Raise<TEventArgs>( this EventHandler<TEventArgs> handler,
object sender, TEventArgs e ) where TEventArgs : EventArgs
{
if ( null != handler ) { handler( sender, e ); }
}