2012-11-02 21 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

using塊就像一個嘗試......最後構造,其中 Try塊使用的資源和最後阻止他們的處置。 因此,無論您如何退出塊,使用塊都保證資源的處置,即 。即使在 未處理的異常的情況下也是如此,除了StackOverflowException。

5

他們將'自動'處理;如果處理關閉可以打開的東西,那麼是的。

8

是的,所有三個都將被關閉。

Using語句結束調用上實現IDisposableDipose方法(這發生在一個Finally部分,編譯器生成)。在這種情況下,當調用Dispose時,這些類將關閉。

只有極少數例外 - 如果進程退出(例如通過在Using聲明的主體中調用Environment.Exit),那麼將不會發生塊和處置。

+0

@JamesMichaelHare - 進程...謝謝。 – Oded

+1

哈,對不起,我應該更清楚,我更專注於出口vs存在... –

+0

+1但「如果過程存在」 - 你的意思是退出不存在 – MarkJ

相關問題