国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【Winform】使用BackgroundWorker控制進度條顯示進度

2019-11-14 14:02:27
字體:
來源:轉載
供稿:網友

許多開發者看見一些軟件有進度條顯示進度,自己想弄,項目建好后發現并沒有自己想象中的那么簡單。。。看了網上很多教程后,寫了一個小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.Drawing; 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 }

主要用到BackgroundWorker是在第60行的方法。(不知道前兩個方法的自行百度。。。不知using()和FileStream的自行百度)

 

在62行,我們讓進度條的最大值等于列表中要復制的文件的數目,這樣每復制完一個文件就在76行用ReportProgress方法報告進度并觸發BackgroundWorker的ProgressChanged事件,通過事件的參數e.ProgressPercentage可以獲取ReportProgress方法中的參數。

 

當然,BackgroundWorker還有其他的方法和事件,可以自己去嘗試,但一般只用到ReportProgress方法和ProgressChanged事件。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上栗县| 新平| 武乡县| 泾源县| 广宗县| 新郑市| 玉溪市| 祁东县| 阿勒泰市| 凭祥市| 华池县| 济阳县| 德兴市| 界首市| 佳木斯市| 紫阳县| 凤翔县| 巴南区| 五河县| 建德市| 梓潼县| 搜索| 阿拉善右旗| 聂拉木县| 新郑市| 桂平市| 榆树市| 宝山区| 休宁县| 岗巴县| 外汇| 中西区| 天门市| 潢川县| 铁岭县| 岳普湖县| 邹平县| 特克斯县| 永嘉县| 泗阳县| 土默特右旗|