17

CompositionTarget.Rendering事件是一个普通的旧 EventHandler,带有一个普通的旧 EventArgs。然而,在现实生活中,它显然总是得到一个RenderingEventArgs实例。因此,您的事件处理程序必须从转换 EventArgs 开始,以便从中获取有用的信息。

为什么不是 type 的事件EventHandler<RenderingEventArgs>,所以我们可以更容易地获得论点(更重要的是,我们甚至可以知道论点在那里)为什么微软会选择给这个事件一个错误的签名?

我想知道向后兼容性——是否存在 RenderingEventArgs 尚不存在的版本?——但似乎并非如此。根据 MSDN,RenderingEventArgs 和 CompositionTarget 是在两个平台上的同一版本中引入的——在 WPF 中,两者都是在 .NET 3.0 中添加的;在 Silverlight 中,两者都是在 Silverlight 3.0 中添加的。

如果它给出任何提示,我遇到了一个旧的讨论线程,其中有人说:“代理正在使用 EventArgs,因为这样做可以在编组方面获得某种性能胜利。” 如果有人可以解释这可能是什么样的表现胜利,我愿意接受这个答案。

4

1 回答 1

3

编组胜利可能是低级内存管理的事情。因为 EventArgs 是事件最常见的参数形式,所以在插件的低级事件处理实现中可能会预先分配缓冲区。它甚至可能只是在某些平台上的胜利,而且只有在密集渲染的情况下。

在最新的 SL 版本中,渲染速度得到了显着提高,我怀疑是这样的调整正在推动这一点。

当接口因实现而受到影响时会很痛苦,但如果胜利很重要,这是一个公平的权衡。此外,在这种情况下,功能并没有真正的损失,因为它很容易转换和获取基础数据。

于 2010-10-11T06:28:35.357 回答