这个应该不太可能十分准确的,我认为是估计的,你看windows的安装程序的时间估计就很不准

解决方案 »

  1.   

    谢谢。
    对于第一个问题,我还不知道应该怎么做。DateTime类支持直接计算两个时间点的间隔吗?
    对于第二个问题,我的意思是不知道应该怎么设置。我现在的做法非常“傻”:(。先读一遍
    文件计算出总的行数,赋给Maximum。然后每次读一行,就将Value加一。这样看上去是对的,
    但是显然效率变低了。而我的程序希望效率高一些。
      

  2.   

    问题一:建议用线程,可能更好处理些;
    问题二:你应该得到文件的大小,用FileInfo取获得,你每次能读多少,除一下,看看大概读多少次,求出于Maximum的比率,从而进行定时刷新。
      

  3.   

    问题一:我还是一个C#新手,不明白你的说法:(
    问题二:FileInfo中的Length属性是long型的,ProgressBar的Maximum是int型,这样如果进行强制转换,就会使得数据不准确。再用ReadLine方法读取出一行文本,计算其字节数,加到Value上时,有可能超出上面的Maximum,抛出异常。有什么办法变通一下?
      

  4.   

    问题一:因为你是在拷文件,当然希望自己主动去刷新进度条,而不是在Timer中被动去刷新,因为你在Timer的Tick事件中去判断copy的数据大小,是很麻烦的;而在线程中,copy文件是一个循环,没拷完一定buffer的数据,去刷新进度条,是很方便的。问题二:我没有让你直接去把FileInfo中的Length属性转换成ProgressBar的Maximum,只是用Length/Maximum得到商,那么每次复制这么多buffer的数据,就去刷新进度条,实际就是算出length和Maximum的一个比值。
      

  5.   

    谢谢。
    第一个问题是我自己弄复杂了。其实只要在开始处理前,先记录下当时的时间。
    然后等处理结束时,在记录下当时的时间。这样取出这两次时间的Minute,Second等属性,
    再直接求差,就可以了。
    关于第二个问题。我还是不明白你的做法(恕我愚钝:()。Maximum的初值是多少?因为在更新Value值时,必须保证其值在Minimum和Maximum之间的。
      

  6.   

    我的意思是把ProgressBar的Maximum的值固定,例如设为100,每次拷文件的时候,得到文件的大小,例如10M,很容易知道文件大小与ProgressBar的Maximum的比率,例如这个,会很清楚的知道每读100k,去更新一下ProgressBar。不知这样,你是否明白?