Non è necessario per annullare l'iscrizione in caso normale.
L'evento abbonato non può impedire l'editore (testClass
) di essere raccolti, ma il contrario può accadere. Non riesco a vedere nulla mantenendo lo testClass
attivo, eccetto lo ObservableCollection
.
testClass.SomeEvent += this.OnSomeEvent;
testClass
è mantenere vivo perché this
this
viene memorizzato nella lista invocazione testClass.SomeEvent
s'(in modo tale che OnSomeEvent
viene chiamato quando c'è un SomeEvent
). this
non manterrà vivo testClass
sottoscrivendo l'evento testClass
.
Nel codice seguente, il obj
viene rimosso dalla raccolta, ed è garbage collection senza cancellarsi, si può tentare di eseguire il codice per vedere il risultato:
void Main()
{
var obj = new BackgroundWorker();
obj.DoWork += OnSomeEvent;
var oc = new ObservableCollection<object>{ obj };
WeakReference objRef = new WeakReference(obj);
Console.WriteLine(objRef.IsAlive);
oc.Remove(obj);
obj = null;
GC.Collect();
Console.WriteLine(objRef.IsAlive);
}
private void OnSomeEvent(object sender, DoWorkEventArgs e)
{
Console.WriteLine("work");
}
uscita:
vero
Falso
Si può dare un'occhiata in un similar question.
fonte
2015-08-13 07:27:51
Thnx. E qual è il modo migliore? Lo sto facendo in collectionChanged. – Sasha