2017-11-08 5 views
0

Hallo habe eine Reihe von Dateien zum Download, die von 1 bis X nummeriert sind. Ich habe einen Hintergrund-Arbeiter, der die Dateien einfach und cool herunterlädt.vb .net Download-Dateien - wenn Fehler Download nächste Datei

Aber manchmal fehlen Dateien auf dem Server. Zum Beispiel, die darunter liegenden Dateien geht von 1 bis 100, aber seine fehlende Datei 48 und 78. Mein Code löst einen Fehler beim Herunterladen der Datei 48 und stoppt dann. Ich möchte, dass es versucht, die Dateien nach dem Despiste herunterzuladen, dass die Datei nicht existiert.

Ich kann es nicht funktionieren lassen.

Mein Code:

Private Sub BackgroundWorker2_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork 
    For value As Integer = 1 To TextBox3.Text 
     Try 
      Dim filepath = FolderBrowserDialog1.SelectedPath & "\" & value & ".png" 
      My.Computer.Network.DownloadFile(TextBox4.Text & value & TextBox5.Text, filepath, False, 500) 
      Dim percentage As String = value/TextBox3.Text * 100 
      BackgroundWorker2.ReportProgress(percentage, "Run coding 1") 
     Catch err As ApplicationException 
      Console.WriteLine(err.Message) 
     End Try 
    Next 
End Sub 
+1

Sie müssen nur herausfinden, welche Ausnahme ausgelöst wird, wenn eine Datei fehlt und diese abfangen. – litelite

+0

Um hinzuzufügen, was @litelite sagte, tun Sie einfach "Catch err als Exception" anstelle von ApplicationException und es wird den Fehler verschlucken. – N0Alias

+0

Aber da ich einen Hintergrundarbeiter habe, wie kann ich diese Ausnahme für eine Texytbox in meiner Hauptform übergeben? – Tiago

Antwort

1

@litelite und @ N0Alias ​​korrekt sind. Sie müssen die richtige Ausnahme in der Schleife abfangen. Um den Fehler in der Konsole oder im Hauptthread zu melden, sollten Sie dies anders machen. Sie berühren Ihre Benutzeroberfläche direkt aus einem Hintergrund-Thread und dies kann zu einem Fehler führen oder ein merkwürdiges Verhalten verursachen. Die Verwendung der ReportProgress-Funktion ist besser.

Dim percentage As String 
For value As Integer = 1 To TextBox3.Text 
    Try 
     Dim filepath = FolderBrowserDialog1.SelectedPath & "\" & value & ".png" 
     percentage = value/TextBox3.Text * 100 
     My.Computer.Network.DownloadFile(TextBox4.Text & value & TextBox5.Text, filepath, False, 500) 
     BackgroundWorker2.ReportProgress(percentage, "Run coding 1") 
    Catch err As Exception 
     BackgroundWorker2.ReportProgress(percentage, "Error: " & err.Message) 
    End Try 
Next 

Der Benutzer kommuniziert ordnungsgemäß mit dem UI-Thread, bevor die Hintergrundverarbeitung abgeschlossen ist. Ihre ReportProgress-Ereignisbehandlungsroutine muss dies anzeigen.