0

次の VB.Net の単純なコードを使用して FTP でファイルをアップロードすると、WebClient.CancelAsync() を呼び出しても実際にはアップロードがキャンセルされません。

誰かが理由を知っていますか?これについて何ができるでしょうか?

Private Sub UploadProgressChanged(ByVal sender As Object, ByVal e As System.Net.UploadProgressChangedEventArgs)
    'TO-DO: Why is pbar empty?
    ProgressBar1.Value = e.ProgressPercentage

    Label1.Text = e.BytesSent & " bytes sent"
End Sub

Private Sub UploadFileCompleted(ByVal sender As Object, ByVal e As System.Net.UploadFileCompletedEventArgs)
    MessageBox.Show("Done!")
    Button1.Text = "Upload"
    ProgressBar1.Value = 0
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim client As New WebClient

    If Button1.Text = "Cancel" Then
        'TO-DO: Doesn't actually cancel upload!
        client.CancelAsync()

        Button1.Text = "Upload"
        ProgressBar1.Value = 0
    Else
        Button1.Text = "Cancel"

        Const MYFILE = "big.file.bin"
        Const LocalFile As String = "C:\" & MYFILE

        Dim RemoteFile As String = "ftp://upload.acme.com/" & MYFILE

        client.Credentials = New NetworkCredential("anonymous", "test")
        client.Proxy = Nothing

        AddHandler client.UploadFileCompleted, AddressOf UploadFileCompleted
        AddHandler client.UploadProgressChanged, AddressOf UploadProgressChanged

        ProgressBar1.Maximum = 100

        Try
            client.UploadFileAsync(New Uri(RemoteFile), LocalFile)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

        client.Dispose()
    End If
End Sub

ありがとうございました。

4

1 に答える 1

0

私自身は VB を使用していませんが、間違ったクライアントで client.cancelAsync() を呼び出しているように見えます。

キャンセル/アップロードボタンを押すたびに、新しいクライアントを作成しています。

開始した最初のクライアントをキャンセルする場合は、click_handler に対して外部でインスタンス化する必要があります。

また、クライアントをキャンセルする必要があるかどうかを確認するためにボタン ラベルを使用するのはなぜですか?

client.IsBusy の場合に実行できます ...

于 2012-04-18T21:01:41.447 に答える