2010-09-02 3 views
14

CompositionTarget.Rendering 이벤트는 보통 오래된 EventArgs가있는 일반 오래된 EventHandler입니다. 그러나 실생활에서는 항상 RenderingEventArgs의 인스턴스를 얻습니다. 따라서 이벤트 처리기는 EventArg를 캐스팅하여 유용한 정보를 가져와야합니다.CompositionTarget.Rendering이 RenderingEventArgs 대신 EventArgs를 사용하는 이유는 무엇입니까?

EventHandler<RenderingEventArgs> 유형의 이벤트가 아니기 때문에 더 쉽게 인수에 도달 할 수 있습니다. 더 중요한 것은 인수가 임을 알 수 있습니다.? Microsoft에서이 이벤트에 잘못된 서명을 지정하는 이유는 무엇입니까?

이전 버전과의 호환성에 대해 궁금해했습니다. 아직 RenderingEventArgs가없는 릴리스가 있었습니까? -하지만 그렇게되지는 않습니다. MSDN에 따르면 RenderingEventArgs 및 CompositionTarget은 두 플랫폼에서 동일한 릴리스에 도입되었습니다. WPF에서는 둘 다 .NET 3.0에 추가되었습니다. Silverlight에서는 Silverlight 3.0에서이 두 가지 기능이 모두 추가되었습니다.

아무런 힌트가 있으면 discussion thread을 보았습니다. "위임자는 EventArgs를 사용하고 있습니다. 일종의 마샬링에서 성능상의 이점이 있기 때문입니다." 어떤 사람이 어떤 종류의 성과를 거둘 수 있는지 설명 할 수 있다면 그 대답을 기꺼이 받아 들일 수 있습니다.

+0

+1 : 마우스 이벤트에서도 마찬가지입니다. * cool * 속성을 사용하려면 좀 더 구체적인 MouseEventArgs로 수동으로 변경해야하는 경우가 있습니다. –

답변

2

마샬링 우승은 아마도 저수준 메모리 관리 문제 일 수 있습니다. EventArgs는 이벤트에 대한 가장 일반적인 인수 형식이므로 플러그인의 저수준 이벤트 처리 구현에 사전 할당 된 버퍼가있을 수 있습니다. 심지어 일부 플랫폼에서는 집중적 인 렌더링을 통해서만 승리 할 수 ​​있습니다.

최신 SL 버전에서 렌더링 속도가 상당히 향상되었으며,이 점을 고려할 때 렌더링 속도가 크게 향상되었습니다.

인터페이스가 구현으로 인해 어려움을 겪을 때 고통을 느낍니다.하지만 승리가 중요 할 경우 공정한 트레이드 오프입니다. 또한이 경우 캐스팅하고 기본 데이터를 얻는 것이 매우 쉽기 때문에 기능에 실제 손실이 없습니다.

관련 문제