2012-11-02 16 views
5

Vì tôi đang sử dụng "sử dụng" ở đây, Nếu có ngoại lệ, trong đó TRY sẽ tự động đóng FtpWebRequest, FtpWebRespons và responseStream?nếu có ngoại lệ trong "đang sử dụng", nó sẽ tự động bị đóng

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

Để tự mình kiểm tra, hãy tạo một lớp thực hiện 'IDisposable' và viết thư cho bảng điều khiển trong phương thức' Dispose' (hoặc đặt điểm ngắt) –

Trả lời

6

Có chúng sẽ được xử lý ngoại trừ khi có tràn ngăn xếp. Từ documentation:

Một khối Sử dụng hoạt động như một Cố gắng ... Cuối cùng xây dựng trong đó khối Hãy thử sử dụng các nguồn lực và cuối cùng chặn định đoạt đối với họ. Vì lý do này, khối Sử dụng đảm bảo việc xử lý tài nguyên, bất kể bạn thoát khỏi khối như thế nào. Điều này đúng ngay cả trong trường hợp ngoại lệ chưa được xử lý , ngoại trừ StackOverflowException.

5

Chúng sẽ tự động được xử lý; nếu vứt bỏ một thứ có thể mở ra, thì có.

8

Có, cả ba sẽ bị đóng.

Tuyên bố Using kết thúc bằng cách gọi phương thức Dipose trên các lớp thực hiện IDisposable (điều này xảy ra trong phần Finally mà trình biên dịch tạo). Trong trường hợp này, các lớp này sẽ đóng khi Dispose được gọi.

Có rất ít ngoại lệ cho điều này - nếu quá trình thoát (nói bằng cách gọi Environment.Exit trong nội dung của câu lệnh Using), thì khối và xử lý Finally sẽ không xảy ra.

+0

@JamesMichaelHare - Process ... thanks. – Oded

+1

Hah, xin lỗi, tôi nên rõ ràng hơn, tôi tập trung nhiều hơn vào lối ra so với tồn tại ... –

+0

+1 nhưng "nếu quá trình tồn tại" - nghĩa là thoát không tồn tại – MarkJ

Các vấn đề liên quan