符号:
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 ); }
}