当前位置:武林网文章中心语言编程HTML、.Net、AJAX → 使用C#在进度条中显示复制文件的进度

使用C#在进度条中显示复制文件的进度

减小字体 增大字体 作者:使用C#在进度条中显示复制文件的进度  来源:www.hack50.com  发布时间:2014-9-9 22:34:26

Code List:
-------------------------------------------------------------------------

/*****************************************************************
** File Name:       frmMain.cs
** Copyright (c) 1999 -2003
** Creator:\t  FirePhoenix
** Created Date:     2004-11-13 15:24
** Modifier:
** Modify Date:
** Description:\t  
** Version:1.0
******************************************************************/

#region Using Directives
using System;
using System.IO ;
using System.Xml ;
using System.Collections ;
using System.Reflection ;
using System.Text ;
using System.Data ;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Threading ;
#endregion

namespace WindowsApplication4
{
/// <summary>
/// Copy Large File
/// </summary>
public class frmMain : System.Windows.Forms.Form
{
 #region
 private System.Windows.Forms.ProgressBar progressBar1;
 private System.Windows.Forms.Button btnCopy;
 /// <summary>
 /// 必需的设计器变量。
 /// </summary>
 private System.ComponentModel.Container components = null;

 public frmMain()
 {
  //
  // Windows 窗体设计器支持所必需的
  //
  InitializeComponent();

  //
  // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
  //
 }

 /// <summary>
 /// 清理所有正在使用的资源。
 /// </summary>
 protected override void Dispose( bool disposing )
 {
  if( disposing )
  {
   if (components != null)
   {
    components.Dispose();
   }
  }
  base.Dispose( disposing );
 }

 #region Initialize Components
 /// <summary>
 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
 /// 此方法的内容。
 /// </summary>
 private void InitializeComponent()
 {
  this.progressBar1 = new System.Windows.Forms.ProgressBar();
  this.btnCopy = new System.Windows.Forms.Button();
  this.SuspendLayout();
  //
  // progressBar1
  //
  this.progressBar1.Location = new System.Drawing.Point(8, 16);
  this.progressBar1.Name = "progressBar1";
  this.progressBar1.Size = new System.Drawing.Size(208, 16);
  this.progressBar1.TabIndex = 0;
  //
  // btnCopy
  //
  this.btnCopy.Location = new System.Drawing.Point(8, 48);
  this.btnCopy.Name = "btnCopy";
  this.btnCopy.TabIndex = 1;
  this.btnCopy.Text = "Copy";
  this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click);
  //
  // frmMain
  //
  this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  this.ClientSize = new System.Drawing.Size(232, 77);
  this.Controls.Add(this.btnCopy);
  this.Controls.Add(this.progressBar1);
  this.Name = "frmMain";
  this.Text = "Copy File";
  this.ResumeLayout(false);

 }
 #endregion

 /// <summary>
 /// Entry Point
 /// </summary>
 [STAThread]
 static void Main()
 {
  Application.Run(new frmMain());
 }


 #endregion

 int totalSize;  //Total Size
 int position;   //Position
 const int BUFFER_SIZE = 4096;
 byte[] buffer;
 Stream stream;

 private void btnCopy_Click(object sender, System.EventArgs e)
 {
  string strFile = "";

  OpenFileDialog dlg = new OpenFileDialog();
  if ( dlg.ShowDialog() ==  DialogResult.OK )
  {
   strFile = dlg.FileName ;
  }
  else
  {
   return ;
  }

  FileStream fs = new FileStream( strFile , FileMode.Open , FileAccess.Read ) ;
  totalSize = (int)fs.Length ;
  stream = fs;

  //Delete file which aready exists.
  if ( File.Exists( "c:\\copyedFile.bin" ) )
   File.Delete( "c:\\copyedFile.bin" );

  //Copy file while larger than 4KB.
  if ( totalSize > BUFFER_SIZE )
  {
   buffer = new byte[ BUFFER_SIZE ];

   // Async Invoke
   stream.BeginRead( buffer , 0 , BUFFER_SIZE , new AsyncCallback( AsyncCopyFile ) , null );  
  }
  else
  {
   fs.Close();
  }
 
 }
       
 /// <summary>
 /// Asynchronously copy file
 /// </summary>
 /// <param name="ar"></param>
 private void AsyncCopyFile( IAsyncResult ar )
 {
  int readedLength ;
 
  // Lock FileStream
  lock( stream )
  {
   readedLength = stream.EndRead( ar );   // When stream endread, get readed length
  }

  // Write to disk
  FileStream fsWriter = new FileStream( "C:\\copyedFile.bin" , FileMode.Append , FileAccess.Write );
  fsWriter.Write( buffer , 0 , buffer.Length );
  fsWriter.Close();

  // Current stream position
  position += readedLength;
   
  // Response UI
  MethodInvoker m = new MethodInvoker( SynchProgressBar );
  m.BeginInvoke( null , null );

  if ( position >= totalSize ) // Read over.
  {
   stream.Close();        //Close FileStream  
   return ;
  }

  // Continue to read and write
  lock ( stream )
  {
   int leftSize = totalSize - position;

   if ( leftSize < BUFFER_SIZE )
    buffer = new byte[ leftSize ];

   stream.BeginRead( buffer , 0 , buffer.Length , new AsyncCallback( AsyncCopyFile ) , null );    
     
  }
 }

 private void SynchProgressBar()
 {
  this.progressBar1.Maximum = totalSize;
  this.progressBar1.Value   = position ;
 }

}
}



本文引用网址:

在下列搜索引擎中搜索“使用C#在进度条中显示复制文件的进度”的相关信息:

谷歌搜索 百度搜索 360搜索 雅虎搜索 搜狗搜索 搜搜搜索 必应搜索 有道搜索
你可能还喜欢以下文章
  • 1怎么做爱舒服?真人示范做爱姿...
  • 2合肥艳照门QQ空间曝光男主角与...
  • 3男女做爱技巧图解 真人示范做爱...
  • 44D肉蒲团之扶桑千人斩qvod下载...
  • 5军艺校花徐冬冬全裸高清组图 徐...
  • 1女孩下面痒了怎么办?
  • 2一组超级黄色笑话
  • 3十八岁女孩第一次做鸡的感觉
  • 4教你如何盗QQ密码
  • 5日本AV六级试卷 (附标准答案)
  • 1林晨钰艳照qvod完整版 林晨钰秀...
  • 24D肉蒲团之扶桑千人斩qvod高清...
  • 3最新王梦溪未经处理雅照曝光 兰...
  • 4武汉工程大学林晨钰爆奶门 35张...
  • 5四川美院女生遭前男友发艳照报...
  • 1怎样破解别人的微信密码?手机...
  • 2怎样翻墙上网?什么是翻墙上网...
  • 3如何破解qq密保问题答案?怎么...
  • 42011 穿越火线战队收人口号|霸...
  • 5苹果5开机密码怎么破解?iphon...
  • 赞助商广告

    图片文章导读