Событие CompositionTarget.Rendering представляет собой обычный старый EventHandler с простыми старыми EventArgs. Однако в реальной жизни очевидно, он всегда получает экземпляр RenderingEventArgs . Таким образом, ваш обработчик событий должен начать с приведения EventArgs, чтобы извлечь из них полезную информацию.
Почему нет события типа EventHandler
, чтобы мы могли перейти к аргументы легче (и что более важно, чтобы мы могли даже знать, что аргументы есть там) ? Почему Microsoft решила присвоить этому событию неправильную подпись?
Я задавался вопросом о обратной совместимости - был ли выпуск, где RenderingEventArgs еще не существовало? - но это не так. Согласно MSDN, RenderingEventArgs и CompositionTarget были представлены в одном выпуске на обеих платформах - в WPF обе были добавлены в .NET 3.0; в Silverlight, оба были добавлены в Silverlight 3.0.
Если он дает какую-либо подсказку, я наткнулся на старую ветку обсуждения , где кто-то сказал: «Делегат использует EventArgs, потому что при маршаллинге есть какой-то выигрыш в производительности делая это ". Если кто-то может объяснить, что это может быть за результативность, я бы согласился принять это как ответ.