2012-10-25 3 views
1

방금이 내용을 명확히하고 싶습니다.이벤트에서 리소스 사용 및 진술 사용

using (WebClient client = new WebClient(TimeoutInSeconds)) 
{ 
    client.DownloadDataAsync(new Uri(par.Base_url)); 
    client.DownloadDataCompleted += (sender, e) => 
    { 
     //code that checks e.Result 
    } 
} 

과 관련된 질문 :이 클라이언트를 배치하는면에서 안전한가요 내 클라이언트가 범위를 벗어나 가정 제대로 메모리가 데이터에서 세척 할 수있는 배치되지 않고, (에의 참조가 없습니다)?

또한 고객이 처분되는 경우 e.Result이 어디에 있습니까? 누구나이를 명확히 할 수 있습니까?

+1

'client' 객체가 예외를 throw 할 수있는 경우에도이 코드는이 객체가 사용할 수있는 모든 리소스를 정리합니다. 네, 그렇습니다. – JonH

+0

e.Result가 어디에 있는지, 어떻게 설명 할 수 있습니까? –

+0

using 문은 항상 무엇이든지간에 리소스를 정리하고 해제합니다. – dansasu11

답변

1

.NET 4.0에서 WebClient 클래스는 System.ComponentModel.Component에서 Dispose 메서드를 상속합니다. protected virtual void Dispose(bool disposing) 메서드를 재정의하지 않으므로 클래스를 삭제하면 기본 클래스의 정리 만 실행됩니다. 즉, ISite의 컨테이너 (있는 경우)에서 해당 구성 요소를 제거하고 Disposed 이벤트를 발생시킵니다. 사이트를 지정하지 않고 Disposed 이벤트를 구독하지 않으므로 실제로 Dispose에 전화 할 필요가 없습니다.

적어도 .NET 4.0에서는 코드가 실패해야하는 것처럼 보이지만 실제로는 그렇지 않습니다.