2012-03-27 39 views
0

要下載一些我做DownloadDataAsync圖像的調用來分開Web客戶端的情況下,在一個循環中,有一個線程睡眠延遲。我期望響應發生在單獨的線程上,但似乎沒有,因爲響應只發生在所有調用完成後。如何從WebClient DownloadDataAsync(或其他)獲取多線程響應?

那麼,什麼是這個的appropritate解決?是否有替代的客戶端類型,或者我應該爲每個Web客戶端調用創建一個線程?

所以目前我在一個循環中調用此:

Private Sub StartDownload(ByVal webImageLink As String, ByVal token As Object) 
    Dim wc As New WebClient 
    Try 
     AddHandler wc.DownloadDataCompleted, AddressOf OnDownloadCompleted 

     wc.DownloadDataAsync(New System.Uri(webImageLink), token) 

     Threading.Thread.Sleep(delay) 

    Catch ex As Exception 
     Debug.Print("Exception in ImageDownloader.DoDownload ") 
    End Try 
End Sub 
+0

你可以張貼一些代碼? – Strillo 2012-03-27 12:10:24

+0

@Strillo,做,我認爲這是所有的相關的.. – bretddog 2012-03-27 12:15:25

回答

1

功能,不是一個錯誤。如果可以,WebClient會努力在同一個線程上提升DownloadCompleted事件。它可以從Winforms或WPF應用程序的UI線程中調用它。通常需要這樣做,您可以在完成事件處理程序中更新UI,而無需使用Control/Dispatcher.BeginInvoke()。但是,在代碼停止運行之前不會發生這種副作用,因此可以調用事件處理程序。它由UI線程的調度循環調度。

一種解決方法,如果你真的需要一個,就是與你開始與ThreadPool.QueueUserWorkItem()一個小幫手方法或線程開始下載。

+0

謝謝!現在使用ThreadPool。可我只是問,如果我不和下載幾百MB的圖片,從5至10000個說電話,哪來這種記憶「堆積」,並將這被認爲是一個貧窮的做法? (不考慮UI凍結) – bretddog 2012-03-28 08:10:03

相關問題