0

タイマーでFTPWEBREQUESTを実行しようとしていますが、このエラーが発生しますTextBox1.Text = reader.ReadToEnd

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
4

1 に答える 1

1

私はあなたの目標とあなたがタイマーを必要とする理由を正確に知りません。

しかし、私はあなたにコーディングの練習のためのいくつかのアドバイスを与えたいと思います:

ストリームを2回閉じる(破棄する)べきではありません。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 
于 2012-10-23T17:12:22.503 に答える