2012-11-02 2 views
5

여기에서 "사용 중"을 사용하고 있기 때문에 TRY에서 FtpWebRequest, FtpWebRespons 및 responseStream이 자동으로 닫히는 예외가있는 경우?"사용 중"에 예외가있는 경우 자동으로 닫힙니다

Try 
Dim request As FtpWebRequest = CType(WebRequest.Create(""), FtpWebRequest) 
     request.Method = WebRequestMethods.Ftp.ListDirectoryDetails 

     request.Credentials = New NetworkCredential("", "") 
     Using response As FtpWebResponse = CType(request.GetResponse(), FtpWebResponse) 

      Using responseStream As Stream = response.GetResponseStream() 
       Using reader As New StreamReader(responseStream) 


        TextBox1.Text = reader.ReadToEnd 
        TextBox1.Text += vbNewLine 
        TextBox1.Text += vbNewLine 
        ' Use the + for appending (set the textbox to multiline) 

       End Using 

      End Using 

     End Using  

Catch ex As Exception 
    MessageBox.Show(ex.Message.ToString()) 
End Try 
+0

자신을 테스트하려면'IDisposable'을 구현하는 클래스를 만들고'Dispose' 메서드 (또는 중단 점 넣기)로 콘솔에 메시지를 작성하십시오. –

답변

6

예 스택 오버플로가있는 경우를 제외하고는 처리됩니다. documentation에서 :

사용하여 A 블록은가 ... 마지막으로 건설하는 Try 블록이 리소스를 사용 시도하고 마지막으로 그들의 처분하는 블록처럼 동작합니다. 이 때문에 Using 블록은 블록을 종료하는 방법과 관계없이 리소스의 폐기를 보장합니다. StackOverflowException을 제외하고 처리되지 않은 예외의 경우에도 마찬가지입니다.

5

'자동 처리'됩니다. 처분하면 열 수있는 것을 닫고, 그렇다면 예.

8

예, 세 개가 모두 닫힙니다.

Using 문은 IDisposable를 구현하는 클래스에 Dipose 방법 (이것은 컴파일러가 생성하는 Finally 섹션에서 발생)를 호출 끝납니다. 이 경우 Dispose이 호출되면이 클래스가 닫힙니다.

이 매우 몇 가지 예외가있다 - 프로세스 종료합니다 (Using 제표 본문에 Environment.Exit를 호출하여 말) 경우, 다음 Finally 블록 및 처리가 발생하지 않을 수 있습니다.

+0

@JamesMichaelHare - 프로세스 ... 감사합니다. – Oded

+1

하하, 미안, 내가 더 분명해야했는데, 출구에 더 초점을 맞추고 있었다. ... –

+0

+1 "프로세스가 존재한다면"출구가 존재하지 않는다. – MarkJ

관련 문제