2012-10-23 36 views
0

我试着做的FtpWebRequest的计时器,但我得到TextBox1.Text = reader.ReadToEnd的FtpWebRequest计时器错误

Cannot access a disposed object. 
Object name: 'System.Net.Sockets.NetworkStream'. 

这个错误你能帮忙吗?

感谢

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 

     Timer1.Stop() 

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

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

     Dim ResponseStream As Stream = response.GetResponseStream() 
     Dim reader As New StreamReader(ResponseStream) 

     'Console.Write(reader.ReadToEnd) 
     'MessageBox.Show("Directory List Complete, status {0}", response.StatusDescription) 


     'MessageBox.Show(reader.ReadToEnd) 
     'MessageBox.Show(reader.ReadToEnd) 

     TextBox1.Text = reader.ReadToEnd 
     TextBox1.Text = vbNewLine 
     TextBox1.Text = vbNewLine 

     ResponseStream.Close() 
     reader.Close() 

     response.Close() 






     reader.Close() 
     response.Close() 


     Timer1.Start() 

    End Sub 
End Class 

回答

1

我不知道你的目标准确,为什么你需要一个计时器。

但我想给你给你的编码实践提出了一些建议:

你不应该接近(处理)两次您的视频流。使用Using声明可获得更清晰的代码和 可读代码。它也有助于尽早释放资源,甚至引发异常。

Public Class Form1  

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  

    End Sub  

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick  

     Timer1.Stop()  

     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  

     Timer1.Start()  

    End Sub  
End Class 
+0

感谢 - 这就是伟大的 - 一件事TAT我注意到,如果我添加一个新的文件,而我的备考应用程序正在运行它不会显示新文件的目录 - 你知道为什么吗?谢谢 –

+0

你的意思是哪个文件?从你的FTP目录列表或一些本地? –

+0

因此,如果应用程序正在运行并且它轮询ftp位置并显示目录内容。如果我将文件复制到filezilla文件夹中,我希望我的应用程序文本框更新,而它的运行,但它不会..thnaks的帮助 –