因为我在这里使用“使用”,如果在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 :(得分:8)
是的,这三个都将被关闭。
Using
语句最终在实现Dipose
的类上调用IDisposable
方法(这发生在编译器生成的Finally
部分中)。在这种情况下,这些类将在调用Dispose
时关闭。
这方面的例外情况非常少 - 如果流程退出(例如通过在Environment.Exit
语句的正文中调用Using
),则Finally
阻止和处置不会发生发生。
答案 1 :(得分:6)
是的,除非存在堆栈溢出,否则它们将被处理掉。来自documentation:
使用块的行为类似于Try ...最终构造中的 Try块使用资源而Finally块处理它们。 因此,Using块可以保证资源的处理, 无论你如何退出街区。即使在情况下也是如此 未处理的异常,除了StackOverflowException。
答案 2 :(得分:5)
他们将“自动”被处置;如果处理关闭了可以打开的东西,那么是。