许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单。。。看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu.com/s/1dDIxHvzBackgroundWorker可以在代码中创建, ...
许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单。。。看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu.com/s/1dDIxHvz
BackgroundWorker可以在代码中创建,也可以在工具箱中拖,但如果要使用,必须将其的WorkerReportsProgress属性设置为True!
这个Demo是一个复制文件的,为了效果更明显,建议复制的文件多一点,方便进度条显示。
界面如下:
下面是全部代码:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Draget='_blank'>wing; 6 using System.IO; 7 using System.Linq; 8 using System.Text; 9 using System.Threading.Tasks;10 using System.Windows.Forms;11 12 namespace Demo_ProgressBar13 {14 public partial class Form1 : Form15 {16 public Form1()17 {18 InitializeComponent();19 }20 21 string[] fileNames = null;//存储文件路径22 string savePath = null;//存储保存路径23 24 private void btnChooseFiles_Click(object sender, EventArgs e)//添加文件到listBox25 {26 OpenFileDialog o = new OpenFileDialog();//打开文件对话框的对象27 o.Multiselect = true;//文件可以多选28 o.ShowDialog();29 if (o.FileNames == null)//如果没有选择文件30 {31 return;32 }33 else34 {35 fileNames = o.FileNames;36 for (int i = 0; i < fileNames.Length; i++)37 {38 if (!lstbxShowFiles.Items.Contains(fileNames[i]))//如果列表中不包含元素才添加39 {40 lstbxShowFiles.Items.Add(fileNames[i]);41 }42 }43 }44 }45 46 private void btnChooseSavePath_Click(object sender, EventArgs e)//选择保存路径47 {48 FolderBrowserDialog f = new FolderBrowserDialog();//选择路径49 f.ShowDialog();50 if (f.SelectedPath == null)51 {52 return;53 }54 else55 {56 txtSavePath.Text = savePath = f.SelectedPath;57 }58 }59 60 private void btnStart_Click(object sender, EventArgs e)//开始复制61 {62 prgrsbr1.Maximum = lstbxShowFiles.Items.Count;//让进度条的最大值等于列表中要复制的文件的数目63 for (int i = 0; i < lstbxShowFiles.Items.Count; i++)64 {65 using (FileStream fsRead = new FileStream(fileNames[i], FileMode.OpenOrCreate, FileAccess.Read))//读取文件流66 {67 using (FileStream fsWrite = new FileStream(savePath + "\\" + Path.GetFileName(fileNames[i]), FileMode.OpenOrCreate, FileAccess.Write))//写入文件流68 {69 byte[] buffer = new byte[1];70 while (fsRead.Read(buffer, 0, buffer.Length) != 0)//返回值为零表示读完71 {72 fsWrite.Write(buffer, 0, buffer.Length);73 }74 }75 }76 bckgrdwkrReport.ReportProgress(i + 1);//报告进度,触发ProgressChanged事件77 }78 prgrsbr1.Value = 0;79 MessageBox.Show("复制成功");80 lstbxShowFiles.Items.Clear();81 txtSavePath.Clear();82 fileNames = null;83 savePath = null;84 }85 86 private void bckgrdwkrReport_ProgressChanged(object sender, ProgressChangedEventArgs e)87 {88 prgrsbr1.Value = e.ProgressPercentage;//e.ProgressPercentage:ReportProgress方法传递的参数89 }90 }91 }
原标题:【WInform】使用BackgroundWorker控制进度条显示进度
关键词:winform
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。