回 帖 发 新 帖 刷新版面

主题:在利用缓冲区复制文件的时候,想要用进度条来指示复制的进度,该怎么做。

刚学C#,这个是用VS2005做的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication1
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btnCopyFile_Click(object sender, EventArgs e)
        {
            if(this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                txtCopyFile.Text = this.openFileDialog1.FileName;
            }
        }

        private void btnSaveFile_Click(object sender, EventArgs e)
        {
            if(this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                txtSaveFile.Text = this.saveFileDialog1.FileName;
            }
        }

        private void btnConfirm_Click(object sender, EventArgs e)
        {
            FileStream fs = new FileStream(@txtCopyFile.Text.ToString(),FileMode.Open);
            FileStream fs2 = new FileStream(@txtSaveFile.Text.ToString(),FileMode.Create);

            byte[] temp = new byte[100];
            BufferedStream bs = new BufferedStream(fs);
            BufferedStream bs2 = new BufferedStream(fs2);
            while(fs.Read(temp,0,temp.Length) > 0)
            {
                fs2.Write(temp,0,temp.Length);
                fs2.Flush();
               
            }            
            if(fs2.Read(temp,0,temp.Length) == 0)
            {           
                MessageBox.Show("复制完成!","提示");
            }
            fs.Close();
            fs2.Close();
        }
    }
}

回复列表 (共4个回复)

沙发

在while循环累加progress就可以了
不过建议采用多线程

板凳

progress.value++;?
不行,文件过大的话,一下子100%就加完了,可否把多线程的思路说下。

3 楼

ProgressBar有两个属性叫做Maximum和Minimum
用于设置最大范围和最小范围

4 楼

多线程嘛,涉及委托/回调等
大体思路就是按钮事件在新线程上跑,progress在UI线程上跑

建议lz系统学习

我来回复

您尚未登录,请登录后再回复。点此登录或注册