Avvertenza! Accepted answer da Steven è errato, tutto ciò che fa è solo mascherare un problema di cui è presente un avvertitore.
Ogni volta determinato codice viene eseguito
EventHandler func = (sender, e) =>
listView_PreviewTextInput(sender, e, listView);
si otterrà una fresca (in quanto si può catturare diversi listView
) istanza del delegato anonima salvato func
, un'istanza che non è sottoscritto tutti gli eventi ancora, in modo a sua volta questo codice
listView.PreviewTextInput -= func;
non farà assolutamente nulla, poiché non puoi annullare l'iscrizione a un evento a cui non sei iscritto. Questo porterà a bug da capogiro, come i gestori di eventi 'chiamato due volte', le perdite di memoria ecc
In realtà, Jon Skeet dice may work in some cases:
La specifica C# afferma esplicitamente (IIRC) che, se si dispone di due funzioni anonime (metodi anonimi o espressioni lambda) è può o non può creare uguali delegati da tale codice.
ad es. quando il compilatore non genera nuove istanze ogni volta, vedrai un buon comportamento.
Ma questo non è affidabile e sicuramente non funzionerebbe nel caso descritto nella domanda iniziale con variabile acquisita listView
.
Quindi il mio suggerimento è:
Usare le funzioni anonime come gestori di eventi solo se si avranno mai di annullare l'iscrizione.
Grazie ma "EventHandler" dovrebbe essere specifico vero ?? Mi ha dato un errore ... 'System.EvenTArgs non è assegnabile a TextCompositonEventArgs' – Ankesh
In questo caso' listView.PreviewTextInput' non è un 'EventHandler', ma probabilmente un' EventHandler ', ma non c'è modo per che io sappia, dal momento che non l'hai mostrato nella tua domanda. –
Steven
Yup .. mio male .. Grazie ne modi ... :) – Ankesh