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. genericHandler
При наличии или genericTarget
указании в качестве null
исключения будут возникать исключения.