为什么CompositionTarget.Rendering使用EventArgs而不是RenderingEventArgs?

时间:2010-09-02 12:55:21

标签: wpf silverlight eventargs

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

为什么不是EventHandler<RenderingEventArgs>类型的事件,所以我们可以更容易地获得参数(更重要的是,我们甚至可以知道参数是那里)为什么Microsoft选择将此事件设为错误签名?

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

如果它提供了任何类型的提示,我遇到了一个旧的discussion thread,有人说,“代表正在使用EventArgs,因为通过这样做,在编组方面取得了某种性能上的胜利。”如果有人能够解释可能会取得什么样的表现,我愿意接受这个答案。

1 个答案:

答案 0 :(得分:2)

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

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

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