2012-03-27 90 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