2009-07-01 6 views
5

한 번만 호출 될 것으로 예상되면 여러 번 호출되는 코드에서 이벤트 처리기를 사용하고 있습니다..NET 이벤트 핸들러 관리

이전에는 위임을 잘못된 위치에 정의했기 때문에 (이는 하나의 대리자가 이벤트 처리 목록에 추가되므로)이 경우에는 클래스 생성자에서 한 번만 설정됩니다).

오류를 찾고 내 코드를 수동으로 검색하지 않고 이벤트 처리기를 할당 할 위치를 파악할 수있는 (간단한) 실용적인 접근법이 있습니까? 그런 다음 추가/내부 로깅 또는 중단 점을 넣어 기능을 제거하고 호출 스택을 볼 수 있었다

private EventHandler _myEvent; 

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

로 ...

public event EventHandler MyEvent; 

:

답변

18

는 기본값을 대체 할 수 있습니다.

+0

멋진 제안 +1 –

+0

그건 매우 간단하고 깔끔한 해결책입니다 - 매력처럼 작동합니다. 고맙습니다. –

1

vb.net을 사용하는 경우 처리기를 메서드에 추가하지 않고 handles 키워드를 사용하고 있습니까?

이로 인해 이벤트가 두 번 처리됩니다.

+0

좋은 아이디어이지만 다시 수동 검색에 초점을 맞추고 있습니다. 또한 저는 C#을 사용하고 있습니다. 어쨌든 고마워. –

1

Resharper을 설치 한 다음 이벤트를 마우스 오른쪽 버튼으로 클릭하고 "사용법 찾기"를 선택하십시오.

+0

사랑 하겠지만 라이센스 나 예산이 없다 :-( –

+0

나는 약 1 개월 만에 돈을 지불한다. 결코 다시는 (또는 이와 비슷한) 일을 결코 받아 들일 수 없다. –

1

코드가 있습니다. 이벤트

Event Classes

에 그리고 내 코드에 도움이 접근 할 수 있도록이 클래스는이 소개 :

이제

alt text http://img440.imageshack.us/img440/1656/featurer.jpg

당신이 이벤트가

CSoft.Core.EventHelper.Raise(); 
+0

좋은 제안이지만, Rogers의 맞춤형 액세서리 접근법은 정말 간단하고 매력적입니다. 어쨌든 입력 해 주셔서 감사합니다. –

0

을 변경할 수에 입력 디버깅 할 수 있습니다 이름 (Visual Studio 리팩터링 도구를 사용하지 않고 단순히 코드의 이름을 변경) 및 컴파일러 중단 위치 확인 .