RoutedEventArgs.InvokeEventHandler(Delegate, Object) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Quando sobreposto numa classe derivada, oferece uma forma de invocar os gestores de eventos de forma específica por tipo, o que pode aumentar a eficiência em 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 genérica do handler/delegar a ser invocada.
- genericTarget
- Object
O alvo sobre o qual o manipulador fornecido deve ser invocado.
Exemplos
Segue-se um pseudocódigo que ilustra um padrão básico que pode ser usado para implementação. Aqui, MyRoutedEventHandler é 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
Observações
A implementação base incorpora reflexão para determinar o handler correto para qualquer caso em que o handler não seja literalmente RoutedEventHandler, e este passo de reflexão tem algumas consequências de desempenho. As invocações podem ser tornadas mais eficientes ao não dependerem da reflexão. Este é o cenário que motiva este método a estar disponível para qualquer classe de argumentos de evento enroteado que opte por sobrepê-lo. As implementações não devem chamar a base deste método, porque a sua implementação já deve ser responsável por invocar os handlers seguros de tipos.
Notas para Herdeiros
Este método destina-se a ser sobreposto por classes de dados de eventos derivados para proporcionar uma invocação mais eficiente dos seus delegados. A implementação deve lançar o fornecido genericHandler para o delegado específico do tipo e depois invocar esse handler.
A implementação por defeito tentará invocar o handler fornecido, tentando lançá-lo como RoutedEventHandler. Se qualquer um genericHandler dos ou genericTarget for fornecido como null, serão levantadas exceções.