RoutedEventArgs.InvokeEventHandler(Delegate, Object) 方法

定义

当在派生类中重写时,提供特定于类型的调用事件处理程序的方式,该方式与基实现相比可提高效率。

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。 如果任一或genericHandlergenericTarget作为null提供,则会引发异常。

适用于