2010-09-02 17 views
14

L'evento CompositionTarget.Rendering è un semplice evento EventHandler, con un semplice evento EventArgs. Tuttavia, nella vita reale, apparentemente ottiene sempre un'istanza di RenderingEventArgs. Quindi il tuo gestore di eventi deve iniziare lanciando EventArgs per ottenere le informazioni utili da loro.Perché CompositionTarget.Rendering accetta EventArgs invece di RenderingEventArgs?

Perché non è il caso di tipo EventHandler<RenderingEventArgs>, così abbiamo potuto raggiungere gli argomenti più facilmente (e più importante, così abbiamo potuto conoscono nemmeno gli argomenti sono lì)? Perché Microsoft ha scelto di dare a questo evento la firma sbagliata?

Mi chiedevo compatibilità con le versioni precedenti: c'era un rilascio in cui RenderingEventArgs non esisteva ancora? - ma non sembra essere il caso. Secondo MSDN, RenderingEventArgs e CompositionTarget sono stati introdotti nella stessa versione su entrambe le piattaforme: in WPF entrambi sono stati aggiunti in .NET 3.0; in Silverlight, entrambi sono stati aggiunti in Silverlight 3.0.

Se si dà alcun tipo di suggerimento, mi sono imbattuto in un vecchio discussion thread cui qualcuno ha detto: "Il delegato sta usando EventArgs perché c'è una sorta di vittoria prestazioni di smistamento per farlo." Se qualcuno può spiegare che tipo di prestazione potrebbe vincere, sarei disposto ad accettarlo come risposta.

+0

+1: la stessa cosa accade anche con gli eventi del mouse. Spesso è necessario cambiarli manualmente in un oggetto MouseEventArgs più specifico per ottenere le proprietà * cool *. –

risposta

2

La vittoria del marshalling è probabilmente una cosa di gestione della memoria di basso livello. Poiché EventArgs è la forma di argomento più comune per un evento, è probabile che vi siano buffer preallocati nell'implementazione della gestione eventi di basso livello del plug-in. Potrebbe anche essere solo una vittoria su alcune piattaforme e solo con il rendering intensivo.

La velocità di rendering è stata notevolmente migliorata nelle ultime versioni di SL e ho il sospetto che si tratti di modifiche come questa.

È un dolore quando l'interfaccia soffre a causa dell'implementazione, ma è un compromesso giusto se la vittoria è significativa. Inoltre, in questo caso non c'è una vera perdita di funzionalità in quanto è abbastanza facile eseguire il cast e ottenere i dati sottostanti.

Problemi correlati