RoutedEventArgs.InvokeEventHandler(Delegate, Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当在派生类中重写时,提供特定于类型的调用事件处理程序的方式,该方式与基实现相比可提高效率。
protected:
virtual void InvokeEventHandler(Delegate ^ genericHandler, System::Object ^ genericTarget);
protected virtual void InvokeEventHandler (Delegate genericHandler, object genericTarget);
abstract member InvokeEventHandler : Delegate * obj -> unit
override this.InvokeEventHandler : Delegate * obj -> unit
Protected Overridable Sub InvokeEventHandler (genericHandler As Delegate, genericTarget As Object)
参数
- genericHandler
- Delegate
要调用的泛型处理程序/委托实现。
- genericTarget
- Object
应在其上调用所提供的处理程序的目标。
示例
下面是可用于实现的基本模式的伪代码。 MyRoutedEventHandler
下面是一个子类RoutedEventHandler。
public class MyRoutedEventArgs : RoutedEventArgs
{
// other members omitted
protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget) {
MyRoutedEventHandler handler = (MyRoutedEventHandler) genericHandler;
handler(genericTarget, this);
}
}
Public Class MyRoutedEventArgs
Inherits RoutedEventArgs
' other members omitted
Protected Overrides Sub InvokeEventHandler(ByVal genericHandler As System.Delegate, ByVal genericTarget As Object)
Dim handler As MyRoutedEventHandler = CType(genericHandler, MyRoutedEventHandler)
handler(genericTarget, Me)
End Sub
End Class
注解
基本实现包含反射,以确定处理程序不是字面 RoutedEventHandler上的任何情况的正确处理程序,并且此反射步骤确实会产生一些性能后果。 通过不依赖反射,可以更高效地调用。 这是促使此方法可用于选择替代此方法的任何路由事件参数类的方案。 实现不应调用此方法的基础,因为你的实现应该已经负责调用类型安全处理程序。
继承者说明
此方法旨在由派生事件数据类重写,以提供对其委托的更高效调用。 实现应将所提供的 genericHandler
委托强制转换为特定于类型的委托,然后调用该处理程序。
默认实现将尝试调用提供的处理程序,并尝试将其强制转换为 RoutedEventHandler。 如果任一或genericHandler
genericTarget
作为null
提供,则会引发异常。