2017-11-08 12 views
0

こんにちは、私は、ファイルを簡単かつクールダウンロード背景ワーカーを作っX. に1からnumeredされているダウンロードするファイルの束を持っている場合。VB .NETダウンロードファイル - エラーのダウンロード次のファイル

しかし、時には、サーバーで不足しているファイルがあります。 たとえば、ファイルの所在が1から100になりますが、ファイルが見つからない場合は48と78になります。 ファイル48のダウンロード中にコードがエラーをスローしてから停止します。私はそれがファイルが存在しないそのdespiste後にファイルをダウンロードしようとしたいと思います。

私はそれを動作させることはできません。

マイコード:

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

ファイルが見つからないときに例外がスローされ、それを捕捉する必要があります。 – litelite

+0

@liteliteが言ったことを追加するには、ApplicationExceptionの代わりに "Catch err As Exception"を実行するだけでエラーを取り込むでしょう。 – N0Alias

+0

しかし私はバックグラウンドワーカーを持っているので、メインフォームのtexytboxに対してその例外をどのように渡すことができますか? – Tiago

答えて

1

@liteliteと@ N0Aliasが正しいです。ループ内で正しい例外をキャッチする必要があります。さらに、コンソールまたはメインスレッドにエラーを伝えるには、これを別の方法で行う必要があります。バックグラウンドスレッドから直接UIに触れていると、エラーが発生したり、奇妙な動作が発生する可能性があります。 ReportProgress関数を使用する方が優れています。

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 

バックグラウンド処理が完了する前にUIスレッドと正しく通信します。 ReportProgressイベントハンドラでこれを表示する必要があります。