Usuwanie metod subskrybujących zdarzenie

0

Próbowałęm tak:

backgroundWorker1.DoWork -= new DoWorkEventHandler(backgroundWorker1_DoWork);

działa. Lecz program będzie sterowany zdarzeniami, więc nie zawsze będę znał nazwy metod w biegu.

Próbowałem też tak:

DoWorkEventHandler currentTestMethod = new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.DoWork += currentTestMethod;

A póżniej

backgroundWorker1.DoWork -= currentTestMethod;

lecz w tym przypadku metoda i tak jest wykonana, jakby nie została usunięta z listy.

1

Jeśli "currentTestMethod" w obydwóch przypadkach jest tą samą metodą (bo to delegat, prawda?) to nie ma możliwości żeby nie usunęło. Musiałbym zobaczyć coś więcej żeby zgadywać.

0

a moze dodajesz ja kilka razy? a currentTestMethod pamieta tylko ostatni dodany delegat

0

hmm.. taka refleksja mnie naszla..
event po stronie klasy-posiadajacej-go daje dostep do listy delegatow z ktorej sie sklada.
delegaty podpiete do eventu sa porownywane podczas -= zwyklym equals czyli po target+method, inaczej -= new X by nigdy nie zadzialalo..
To znaczy, ze klasa-posiadajaca spokojnie moglaby spokojnie -='owac wszystkie rzeczy z invocation list, a'la:

var copy = eventJakis.getinvocationlist(); //* mozliwe ze .Clone() etc potrzebne
foreach(var deleg in copy) eventJakis -= deleg;

jakkolwiek nigdy tego nie probowalem, wydaje mi sie ze wyczysci kompletnie event z handlerow.
jednak potrzeba takiej konstrukcji (poza jakims rozbudowanym systemem ze skomplikowanym cyklem zycia i maksymlanym reuzyciem obiektow) wydaje mi sie swiadczyc, ze gdzies-indziej komus logika zawiodla..

1 użytkowników online, w tym zalogowanych: 0, gości: 1