2009-07-01 10 views
5

Mam obsługi zdarzeń w kodzie, które widzę jest wywoływana wiele razy, gdy oczekuję, że będzie on wywoływany tylko raz.. Zarządzanie Eventhandler .NET

W przeszłości było to spowodowane tym, że zdefiniowałem delegację w niewłaściwym miejscu (tak, że jeden delegat został dodany do listy obsługi zdarzeń), ale w tym przypadku jest to ustawiane tylko raz (w konstruktorze klasy).

Zamiast kontynuować ręczne przeszukiwanie mojego kodu w poszukiwaniu błędów, czy istnieje (proste) pragmatyczne podejście, które mogę podjąć, aby dowiedzieć się, gdzie są przypisywane procedury obsługi zdarzeń?

Odpowiedz

18

Można zastąpić domyślne:

public event EventHandler MyEvent; 

... z

private EventHandler _myEvent; 

public event EventHandler MyEvent 
{ 
    add { _myEvent += value; } 
    remove { _myEvent -= value; } 
} 

Następnie można umieścić rejestrowanie lub punkty przerwania wewnątrz dodaj/usuń funkcje i spojrzeć na stosie wywołań.

+0

Dobra sugestia +1 –

+0

To bardzo proste i miłe rozwiązanie - działa jak urok. Dziękuję Ci. –

1

jeśli korzystasz z vb.net, to czy jesteś pewien, że nie dodajesz obsługi do metody, a także używasz słowa kluczowego handle?

powoduje to dwukrotne wykonanie zdarzenia.

+0

Dobry pomysł, ale znowu koncentruje się na wyszukiwaniu ręcznym. Używam również C#. Dzięki i tak. –

1

Zainstaluj Resharper, a następnie kliknij prawym przyciskiem myszy na wydarzeniu i wybierz "Znajdź zastosowania".

+0

Chciałbym, ale nie mam na to licencji ani budżetu :-( –

+0

Powiedziałbym, że to się opłaca za około 1 miesiąc. Nigdy bym nie zaakceptował pracy bez (lub czegoś podobnego) ponownie –

0

można zmienić name (nie używając narzędzi re-faktoringowych Visual Studio, po prostu zmień nazwę w kodzie) i zobacz, gdzie kompilator się zepsuje .