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