2010-09-02 81 views
14

CompositionTarget.Rendering事件是一个普通的旧EventHandler,具有普通的旧EventArgs。但是,在现实生活中,它显然总是获得RenderingEventArgs的实例。因此,您的事件处理程序必须先投射EventArgs以获取有用的信息。为什么CompositionTarget.Rendering需要使用EventArgs而不是RenderingEventArgs?

为什么不是EventHandler<RenderingEventArgs>类型的事件,所以我们能够争取到的参数更容易(更重要的,所以我们甚至可以知道参数是有)为什么微软会选择给这个事件添加错误的签名?

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

如果它提供了任何提示,我碰到了一个老的discussion thread,有人说:“这个委托使用EventArgs,因为这样做有一定的性能。如果有人能够解释什么样的表现可能会胜出,我会愿意接受这个答案。

+0

+1:鼠标事件也发生同样的事情。您经常需要手动将它们更改为更具体的MouseEventArgs以获取* cool *属性。 – 2010-09-02 13:18:03

回答

2

编组获胜可能是低级别的内存管理事情。由于EventArgs是事件最常见的参数形式,因此在处理插件实现的低级事件中可能会预先分配缓冲区。它甚至可能只是在某些平台上获胜,并且只能进行密集渲染。

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

当接口因实现而受到影响时,这是一种痛苦,但如果胜利是显着的,则这是公平的。此外,在这种情况下,功能并没有真正的损失,因为它很容易投射并获取底层数据。

相关问题