如果“使用”中有异常,它将自动关闭

时间:2012-11-02 16:45:18

标签: c# vb.net

因为我在这里使用“使用”,如果在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

3 个答案:

答案 0 :(得分:8)

是的,这三个都将被关闭。

Using语句最终在实现Dipose的类上调用IDisposable方法(这发生在编译器生成的Finally部分中)。在这种情况下,这些类将在调用Dispose时关闭。

这方面的例外情况非常少 - 如果流程退出(例如通过在Environment.Exit语句的正文中调用Using),则Finally阻止和处置不会发生发生。

答案 1 :(得分:6)

是的,除非存在堆栈溢出,否则它们将被处理掉。来自documentation

  

使用块的行为类似于Try ...最终构造中的   Try块使用资源而Finally块处理它们。   因此,Using块可以保证资源的处理,   无论你如何退出街区。即使在情况下也是如此   未处理的异常,除了StackOverflowException。

答案 2 :(得分:5)

他们将“自动”被处置;如果处理关闭了可以打开的东西,那么是。