求一个进度条的代码或实现原理.
进行数据库里的数据库表下载.要求按下载的进度显示进度.并且显示正下载的表名

解决方案 »

  1.   

    先计算总共多少条数据count,将进度条的maxvalue设为count,然后每下载一条数据进度条的value+1,并取得当前表名显示出来。
      

  2.   

    一段显示下载进度条的下载文件代码  
    VB.NET  Public Shared Sub DownFile(ByVal URL As String, ByVal Filename As String, ByVal Prog As ProgressBar)
        Dim Myrq As HttpWebRequest = HttpWebRequest.Create(URL)
        Dim myrp As HttpWebResponse = Myrq.GetResponse
        Dim totalBytes As Long = myrp.ContentLength
        Prog.Maximum = totalBytes
        Dim st As Stream = myrp.GetResponseStream
        Dim so As Stream = New FileStream(Filename, FileMode.Create)
        Dim totalDownloadedByte As Long = 0
        Dim by(1024) As Byte
        Dim osize As Integer = st.Read(by, 0, by.Length)
        While osize > 0
          totalDownloadedByte = osize + totalDownloadedByte
          Application.DoEvents()
          so.Write(by, 0, osize)
          Prog.Value = totalDownloadedByte
          osize = st.Read(by, 0, by.LongLength)
        End While
        so.Close()
        st.Close()
      End Sub
    C#
    public static void DownFile( string URL, string Filename, ProgressBar Prog )
    {
      System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
      System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
      long totalBytes = myrp.ContentLength;
      Prog.Maximum = (int)totalBytes;
      System.IO.Stream st = myrp.GetResponseStream();
      System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create);
      long totalDownloadedByte = 0;
      byte[] by = new byte[1024];
      int osize = st.Read(by, 0, (int)by.Length);
      while (osize > 0)
      {
        totalDownloadedByte = osize + totalDownloadedByte;
        Application.DoEvents();
        so.Write(by, 0, osize);
        Prog.Value = (int)totalDownloadedByte;
        osize = st.Read(by, 0, (int)by.Length);
      }
      so.Close();
      st.Close();
    }   我没有测试过,希望可以给你点思路!(转发)
      

  3.   

    public static void DownFile( string URL, string Filename, ProgressBar Prog )
    ...{
      System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
      System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
      long totalBytes = myrp.ContentLength;
      Prog.Maximum = (int)totalBytes;
      System.IO.Stream st = myrp.GetResponseStream();
      System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create);
      long totalDownloadedByte = 0;
      byte[] by = new byte[1024];
      int osize = st.Read(by, 0, (int)by.Length);
      while (osize > 0)
      ...{
        totalDownloadedByte = osize + totalDownloadedByte;
        Application.DoEvents();
        so.Write(by, 0, osize);
        Prog.Value = (int)totalDownloadedByte;
        osize = st.Read(by, 0, (int)by.Length);
      }
      so.Close();
      st.Close();
                }
      

  4.   

    TO wzq6511(不怕不会,就怕不学!) 
       你的方法我的几点问题:
      1;怎么取得要下载数据的count  下载是按表下载的.当然也得去读数据.不过要取得这个COUNT好象挺难.
      2.进度提示要显示的表名要怎么办?
      

  5.   

    TO paulyjin 和anncesky1
    感谢你们提供的方法.还有什么思路吗?
      

  6.   

    用select count(*) from tablename计算有多少条记录,把所有表的count加起来就是总的count,要显示表名,就要知道当前下载的是哪张表的数据。我在公司的项目中都是这样做的,也算是原创了,不知道有没有别人用过
      

  7.   

    如果你用的是vs2003就要用一个Thread来做进度显示,如果是vs2005就可以在主线程中显示。这是进度显示问题。有同步显示表名有很多办法,如果你把要下载的表保存在dataset中,就可以用一个string[] 字符数组来保存表名,你要知道表在dataset中的索引,用这个索引去找string[index]中的string值,而且要在for循环中下载表的内容。   这些都是我用过的方法,只要你去多想想肯定也可以想到好办法的。要做好一个程序员最好遇到问题的时候多想想,自己去搜索一些资料,如果都要靠别人把代码贴出来,那你基本上是永远不会有什么进步的!!!!
      

  8.   

    现在好像更流行这样的进度展示控件!不需要计算还剩下多少了:)【翻译】程序加载时的旋转进度圈组件
    http://bbs.msproject.cn/Default.aspx?g=posts&t=410