在网上找了很久想找出一个进度条同步线程的例子, 结果看到的都是一些无聊的人写个for循环,然后在里面执行i++ ,然后sleep之后来显示个进度条给人看. 感觉真的没有多大意义.这是最精简的结构了,这个如果你觉得没用说明你根本还是没理解。

解决方案 »

  1.   

    这可能是你自己完全没有转过弯来!总预估时间是变动的,当前已经花费的时间也是变动的。当前花费时间就好像要“追赶”总预估花费时间似地。对于一个进度条而言,它的MaxValue是变动的,它的Value也是变动的。你自己好好动动你的脑筋吧!
      

  2.   

    MaxValue是变动的,但是无法计算出当前的MaxValue,没有类似于的length ,也没有在任何循环之内 ,它的Value也是不知道的,不知道当前执行到了哪一步...跟你说清楚点这个程序,就是要加载一个大的文件,小到十几兆 ,大到数个GB 甚至几个GB ,用文件流读取到字节数组,然后执行一些复杂的算法操作, 举个例子比如说异或操作 ,以及进行一些乘积之类的可逆操作,经过复杂的计算之后,得到新的字节数组,用文件流写入到硬盘以一种自定义的压缩加密格式保存下来,写入是另外之后的事情,不在该线程内,这里不看. 其中的过程比较缓慢,响应时间过长,所以读取文件流到算法操作都写在一个线程里面 ,占用时间较多的是读取操作 ,如何在读取中获取当前读取了该文件的百分之多少?WinRAR 压缩的时候显示的进度条是同步的, 你认为这个程序如何用进度条同步出当前文件的读取进度?
      

  3.   


    谢谢你的好心解答! 不过确实不知道读取和处理了多少字节。 举个例子,比如说获取一个文件的sha1值。
     //这里str_fileName是一个大文件的文件名含全路径 ,假定大概1.5G大小。 
             FileStream fs = new FileStream(str_fileName, FileMode.Open, FileAccess.Read);
                SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
    byte[] byt = sha1.ComputeHash(fs);
    string sha1Value= BitConverter.ToString(byt).Replace("-", "");在这个过程中,我就基本上没法确定进程完成的进度。 但是这个过程需要时间来等待 。