我写的程序需要在Oracle上存取图片,但如何网速慢的话程序在从数据库上获取图片的过程中程序会出现假死的状态,于是我用一个进度条来显示图片数据的获取进度,可由于程序获取图片时已经处于假死状态,进度条也不会跟进,怎么办呢?
我试着把 DoEvents 放在循环中
可为什么还不行呢?
非常感谢,下面是程序代码
==========================================
  '从数据库获取图片
  Private Sub GetPicture()
          Dim DataFile  As Integer
          Dim Fl        As Long
          Dim Chunks    As Integer
          Dim Fragment  As Integer
          Dim Chunk()  As Byte
          Dim i        As Integer
          Const ChunkSize    As Integer = 16384        '块缓存大小
          Dim rs        As Recordset
         
          On Error GoTo What2Do
         
          Set rs = New ADODB.Recordset
         
          rs.Open "select Picture from YC_PIM_HYD_PROTECTION where Code = " & CurrentCode, cnnDB, adOpenDynamic, adLockOptimistic
   
          DataFile = 1
          Open App.path & "\pictemp." & CurrentFileExtension For Binary Access Write As DataFile
         
          Fl = rs!Picture.ActualSize
          Chunks = Fl \ ChunkSize
          Fragment = Fl Mod ChunkSize
          ReDim Chunk(Fragment)
          Chunk() = rs!Picture.GetChunk(Fragment)
          Put DataFile, , Chunk()          For i = 1 To Chunks
            ProgressBar1.Value = i / Chunks * ProgressBar1.Max
            ReDim Buffer(ChunkSize)
            Chunk() = rs!Picture.GetChunk(ChunkSize)
            Put DataFile, , Chunk()
          Next i          ProgressBar1.Value = ProgressBar1.Max
          Close DataFile
   
          CurrentPicturePath = App.path & "\pictemp." & CurrentFileExtension
          ShowPicture
         
          Exit Sub
  What2Do:
    MsgBox ("从服务器下载图片错误!")
    Exit Sub
  End Sub

解决方案 »

  1.   

    可以使用RecordSet异步加载。参考 http://support.microsoft.com/kb/262311
      

  2.   

    在 For i = 1 To Chunks 下面增加一句(或者在循环体的任何地方):DoEvents
    如果你还嫌CPU占用高的话,再加一句:Sleep(1)Sleep 是 API 函数,声明如下:
    Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
      

  3.   


    同意:          For i = 1 To Chunks 
                ProgressBar1.Value = i / Chunks * ProgressBar1.Max 
                ReDim Buffer(ChunkSize) 
                Chunk() = rs!Picture.GetChunk(ChunkSize) 
                Put DataFile, , Chunk() 
                doevents     '加这句
              Next i