2012-04-04 3 views
0

Mit dem folgenden einfachen VB.Net-Code zum Hochladen von Dateien in FTP bricht ein Aufruf von WebClient.CancelAsync() den Upload nicht ab.Upload mit WebClient abbrechen?

Weiß jemand warum und was kann dagegen getan werden?

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 

Vielen Dank.

Antwort

0

Ich benutze VB nicht selbst, aber es sieht für mich wie Sie client.cancelAsync() auf dem falschen Client aufrufen.

Sie machen jedes Mal einen neuen Client, wenn Sie auf die Schaltfläche Abbrechen/Hochladen klicken.

Wenn Sie den ersten Client, den Sie gestartet haben, abbrechen möchten, müssen Sie ihn extern in click_handler instanziieren.

Auch warum verwenden Sie die Schaltfläche Label, um zu überprüfen, ob der Client abgebrochen werden sollte?

Sie tun können, wenn client.IsBusy ...

+0

Ich weiß nicht, ich habe gerade für Proben gegoogelt und die oben gefunden. Danke für die Infos, ich werde nachforschen. – Gulbahar