当前位置: 代码迷 >> VB Dotnet >> vb.net 获取HTTP下载文件的进度,该如何解决
  详细解决方案

vb.net 获取HTTP下载文件的进度,该如何解决

热度:407   发布时间:2016-04-25 02:00:25.0
vb.net 获取HTTP下载文件的进度
老师好!
      我有如下代码,下载HTTP文件用的,怎么才能得到即时下载进度呢?

Dim myWebClient As WebClient

 Private Sub DownLoadFiles()
    myWebClient = New WebClient
    AddHandler myWebClient.DownloadProgressChanged, AddressOf ShowDownProgress 这一句是在网上看到的,用这句来捕获下载进度变化事件,不知道对不对。
    myWebClient.DownloadFile("http://mir3.clientdown.sdo.com/Mir3/Full_Mir3_Setup_V1.0.0.22.exe", "Full_Mir3_Setup_V1.0.0.22.exe")
  End Sub

DownLoadFiles  方法是通过线程启动的,如下:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    downThread = New Thread(AddressOf DownLoadFiles)
    downThread.Start()
  End Sub


求大神指点!
------解决思路----------------------
用不着画蛇添足的 Thread。WebClient 有一系列 xxxAsync 方法支持异步操作,这些都可以通过事件来捕获下载过程中的事件。
------解决思路----------------------
引用:


    Dim myWebClient As WebClient
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myWebClient = New WebClient
        AddHandler myWebClient.DownloadProgressChanged, AddressOf ShowDownProgress '这一句是在网上看到的,用这句来捕获下载进度变化事件,不知道对不对。
        AddHandler myWebClient.DownloadDataCompleted, AddressOf DownloadDataCompleted
    End Sub

    Private Sub DownLoadFiles()  
        myWebClient.DownloadFileAsync(New Uri("http://dlsw.baidu.com/sw-search-sp/soft/3a/12350/QQ_V7.6.15742.0_setup.1441010663.exe"), "QQ_V7.6.15742.0_setup.1441010663.exe")
    End Sub

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        DownLoadFiles()
    End Sub

    '这里是进度条显示
    Private Sub ShowDownProgress(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
        Invoke(New Action(Of Integer)(Sub(i) ProgressBar1.Value = i), e.ProgressPercentage)
    End Sub

    '这里是完成部分
    Sub DownloadDataCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)

        If MessageBox.Show("您已经下载成功,是否打开应用程序?", "提示", MessageBoxButtons.YesNo) = DialogResult.Yes Then

            System.Diagnostics.Process.Start("QQ_V7.6.15742.0_setup.1441010663.exe") ' 启动刚下载的程序

        Else


        End If

    End Sub


这一步可以不用委托  上面的老师说的对, 有线程要开委托, 没线程就不用委托了

    '这里是进度条显示
    Private Sub ShowDownProgress(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
        ProgressBar1.Value = e.ProgressPercentage
    End Sub
  相关解决方案