表示法:
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,则可以将helper方法声明为扩展方法:
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 ); }
}