2012-08-08 89 views
0
Public Sub downloadFile(ByVal url As String) 
     LogFile.displayMessage("add url=" & url) 
     downloadURLs.Enqueue(url) 

     If t Is Nothing Then 
      LogFile.displayMessage("create new thread") 
      t = New Thread(AddressOf ThreadedDownloadFile) 
     End If 

     If Not t.IsAlive Then 
      LogFile.displayMessage("start thread") 
      t.Start() 
     End If 

    End Sub 


Private Sub download() 
     LogFile.displayMessage("thread running count=" & downloadURLs.Count) 
     If downloadURLs.Count > 0 Then 
      Dim client = New WebClient() 
      AddHandler client.DownloadFileCompleted, AddressOf downloadFileCompleted 
      AddHandler client.DownloadProgressChanged, AddressOf downloadProgressChanged 

      Dim url = downloadURLs.Dequeue() 
      LogFile.displayMessage("downloading url=" & url) 
      url = WebRequest.Create(url).GetResponse.ResponseUri.AbsoluteUri 
      Dim fileName = url.Substring(url.LastIndexOf("/") + 1) 

      progress = 0 
      LogFile.displayMessage("downloading NOW NOW NOW url=" & url) 
      client.DownloadFile(New Uri(url), localAddress & fileName) 
     End If 
     LogFile.displayMessage("thread end") 
    End Sub 
    Private Sub downloadFileCompleted() 'ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs) 
     LogFile.displayMessage("download complete ") ' & e.Result) 

     LogFile.displayMessage("set next download going") 
     download() 
    End Sub 

但是在第二輪它獲取了url然後停在下載文件處。 它也用downloadfileasync爲什麼webclient不能在第二次調用時下載VB.NET

我看到很多網頁討論這個,但沒有一樣解決它

沒有人知道這可怎麼固定?

額外的細節

我做啓動一個新的線程,但無論他們似乎都工作帶來極大的第一次,但隨後在第二個電話我該怎麼辦呢,webclient.downloadfile或downloadfileasync等 ,他們看起來似乎是在文件出現時下載的,但進度調用永遠不會完成,並且永遠不會完成。

我試過配置,然後什麼都沒有,然後重新聲明它,甚至強制垃圾收集處理後,什麼也沒有。

但它仍然不想工作。

我正在探索在做轉移自己,通過物流

+0

遺憾的佈局,我不能讓代碼標籤的工作,如果有些可以解釋他們是如何工作我會改正。 – f1wade 2012-08-08 12:06:02

回答

0

的問題是無關的下載,這是該代碼: -

Dim wrequest = WebRequest.Create(url) Dim wresponce = wrequest.GetResponse()

'save new url to be returned 
    return wresponce.ResponseUri.AbsoluteUri 

我現在請密切與空的情況下,後有使用。

'making sure to close off unneeded resources after use wresponce.Close() wresponce = Nothing wrequest = Nothing

1

我建議螺紋仍處於活動狀態,你不檢查這一條件。

試着改變你的代碼如下所示,以測試我的理論:

If Not t.IsAlive Then 
    LogFile.displayMessage("start thread") 
    t.Start() 
else 
    LogFile.DisplayMessage("Thread was still active") 
End If 

我還以爲你會希望每次反正啓動一個新線程?

相關問題