System.Windows.Forms.Control
에서 Dispose()
으로 전화하면 모든 이벤트 등록이 자동으로 제거됩니까?`Control.Dispose()`는 모든 이벤트 등록을 제거합니까?
var button = new Button();
button.Click += someObject.clickHandler;
// ...
button.Dispose();
또는 같은, 내가 명시 적으로 이벤트 핸들러의 등록을 취소해야합니까 :
그래서 예를 들어, 다음과 같은 충분한 명시 적으로 이벤트 핸들러를 제거하지 않습니다 Dispose()
를 호출
var button = new Button();
button.Click += someObject.clickHandler;
// ...
button.Click -= someObject.clickHandler;
button.Dispose();
Annoyingly,'Component' (따라서'Control')가 (EventHandlerList를 통해) 대부분의 이벤트에 사용하는 모델은 실제로 이것을 매우 달성 할 수있었습니다. 그들이 이것을하지 않기로 결정한 것은 흥미 롭습니다. 그들이 처리해야 할 것은'Dispose (bool disposing) '의 끝에'events' 필드를'null'로 설정하는 것입니다. –
예,'Component'에서'EventHandlerList' 필드를 보았고, 모든 이벤트 처리기를 구독 취소하기 위해'Dispose (bool) '에 있습니다.하지만 문서에 언급되어 있지 않습니다. 그래서 내가 여기 묻어야 만했습니다 ... 정말로 짜증나게합니다! –