RoutedEventArgs.InvokeEventHandler(Delegate, Object) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Quando substituído em uma classe derivada, fornece um modo de se invocar os manipuladores de eventos de uma maneira específica a um tipo, que pode aumentar a eficiência com relação à implementação base.
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)
Parâmetros
- genericHandler
- Delegate
A implementação de manipulador/delegado genérica a ser invocada.
- genericTarget
- Object
O destino no qual o manipulador fornecido deve ser invocado.
Exemplos
Veja a seguir um pseudocódigo que ilustra um padrão básico que pode ser usado para implementação. Aqui, MyRoutedEventHandler
há uma subclasse de 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
Comentários
A implementação base incorpora reflexão para determinar o manipulador certo para qualquer caso em que o manipulador não esteja literalmente RoutedEventHandler, e essa etapa de reflexão tem algumas consequências de desempenho. Invocações podem ser mais eficientes ao não depender da reflexão. Esse é o cenário que motiva esse método a estar disponível para qualquer classe de argumentos de evento roteado que optam por substituí-lo. As implementações não devem chamar a base para esse método, pois sua implementação já deve ser responsável por invocar os manipuladores seguros de tipo.
Notas aos Herdeiros
Esse método destina-se a ser substituído por classes de dados de eventos derivadas para fornecer invocação mais eficiente de seus delegados. A implementação deve converter o fornecido genericHandler
para o delegado específico do tipo e, em seguida, invocar esse manipulador.
A implementação padrão tentará invocar o manipulador fornecido, tentando convertê-lo como RoutedEventHandler. Se for genericHandler
fornecido ou genericTarget
fornecido como null
, as exceções serão geradas.