如我的软件检测到需要更新时将从网上下载文件至本地,而这时程序就会处于挂起状态。请问如何不让其挂起,或者可以后台下载,并像大多数软件更新时动态显示出下载进度。 

解决方案 »

  1.   

    分块下载,中间用doevents因为VB不支持多线程,可以放入另一个进程里面调用换用VB.NET
      

  2.   

    请大家参考下下面这段代码,看其它人跟贴说有用,但我一用就说“文件名错误”
    原贴地址:http://bbs.pfan.cn/post-158553.html
    '添加 internet transfer control 6.0 和 windows commom controls 6.0
    'form代码:Private Sub cmdGET_Click()
    StartDownLoad txtUrl
    End SubPrivate Sub Form_Load()
    savefile.Text = App.Path
    End SubPrivate Sub StartDownLoad(ByVal Geturl As String)
    Dim spo%, filename$
    Dim fso, f
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(App.Path & "\download") Then Set f = fso.CreateFolder(App.Path & "\download")
    spo = InStrRev(Geturl, "/")
    filename = Right(Geturl, Len(Geturl) - spo) '获取文件名
    savefile.Text = App.Path & "\download\" & filename
    Inet1.Execute Geturl, "get"   '开始下载
    End SubPrivate Sub Inet1_StateChanged(ByVal State As Integer)
       'State = 12 时,用 GetChunk 方法检索服务器的响应。
       Dim vtData() As Byte
       Select Case State
       '...没有列举其它情况。
       Case icError '11
          '出现错误时,返回 ResponseCode 和 ResponseInfo。
          vtData = Inet1.ResponseCode & ":" & Inet1.ResponseInfo
       Case icResponseCompleted ' 12
          Dim bDone As Boolean: bDone = False
          '取得第一个块。
          vtData() = Inet1.GetChunk(1024, 1)
          DoEvents
          Open savefile.Text For Binary Access Write As #1     '设置保存路径文件后开始保存
          '获取下载文件长度
          If Len(Inet1.GetHeader("Content-Length")) > 0 Then ProgressBar1.Max = CLng(Inet1.GetHeader("Content-Length"))
          
          '循环分块下载
          Do While Not bDone
             Put #1, Loc(1) + 1, vtData()
             vtData() = Inet1.GetChunk(1024, 1)
             DoEvents
             ProgressBar1.Value = Loc(1)   '设置进度条长度
             If Loc(1) >= ProgressBar1.Max Then bDone = True
          Loop
           
          Close #1
          MsgBox "下载完成", vbInformation, "通知"
       End Select
       
    End Sub