为什么webclient不能在第二次调用VB.NET时下载

时间:2012-08-08 12:05:14

标签: .net vb.net multithreading webclient

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.downloadfile或downloadfileasync等。 他们似乎第一次工作得很好,但是在第二次调用时,他们似乎确实在文件出现时下载,但进程调用从未进行,并且它永远不会返回完成。

我已经尝试过处理,然后什么也没有,然后重新声明它,甚至在处置后强行收集垃圾,没有。

但它仍然不想工作。

我正在探索自己通过溪流进行转移

2 个答案:

答案 0 :(得分:1)

我建议线程仍处于活动状态,因为您不检查该条件。

尝试按如下方式更改代码以测试我的理论:

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

我原以为你会想要每次都开始一个新主题?

答案 1 :(得分:0)

问题与下载无关,就是这段代码: -

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

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

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

我现在调用close并在使用后将实例置空。