当前位置:编程学习 > C#/ASP.NET >>

WinForm进度条问题

将一个大文件拷贝到另外一个地方,由于时间较长,想用进度条显示文件拷贝进度,如何实现,要有源码?不能用timer做假的。 --------------------编程问答-------------------- http://www.our-code.com/news/20101010/n3657162.html
这里有源码。 --------------------编程问答-------------------- 用双线程啊,文件总数和拷了的文件数的比。 --------------------编程问答-------------------- 我的题目是WinForm,不是web.看清楚题目再回答。 --------------------编程问答-------------------- 这个貌似是WEB板块吧,。。。  --------------------编程问答--------------------
using System.Threading;//引入命名空间
    Thread thread = null;//其次声明一个线程对象
    public delegate void DelSetPro(int pros);//声明一个委托对象

    //// <summary>
    /// 设置进度条内容
    /// </summary>
    /// <param name="pros">渐变的值</param>
    private void SetProContent(int pros)
    {
        if (pros <= 100)
        {
            //起初调用方位于创建控件所在的线程以外的的线程中,所以必须调用Invoke方法
            if (this.InvokeRequired)
            {
                DelSetPro delsetpro = new DelSetPro(SetProContent);
                //在拥有控件的线程上,用指定的参数列表执行指定委托
                this.Invoke(delsetpro, new object[] { pros });
            }
            else
            {
                this.pBarLinking.Value = pros;
            }
        }
        else
        {
            thread.Abort();//终止线程
        }
    }
    
    ///// <summary>
    /// 阻止当前线程
    /// </summary>
    private void SleepThread()
    {
        for (int i = 0; i < 500; i++)
        {
            Thread.Sleep(100);
            //修改进度条的前进速度,可修改[/]号后面的数字,数字越小,速度越快
            SetProContent(100 * i / 30);
        }
    }

    //最后在窗体加载事件中或是按钮点击事件中启动线程
    thread = new Thread(new ThreadStart(SleepThread));
    thread.Start();

参考 --------------------编程问答-------------------- 谁能给一个完整的源码,分全给了。。。。。 --------------------编程问答--------------------
引用 2 楼 jshazhang 的回复:
用双线程啊,文件总数和拷了的文件数的比。


你拷一个大文件的话,肯定不是把它全部写到缓冲区里面,然后再从缓冲区里面取出来,放到另外一个地方

必须就是分段拷贝,然后再重新整合

举个例子,文件总分了N 个Block,当前拷了K 个,那进度就是 K / N 

不难,提供个思路,自己实现吧
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,