您的位置:首页 > 其它

多线程实现文件复制

2008-04-28 08:17 232 查看
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Threading;

using System.IO;

namespace CopyFileDemo

{

public partial class CopyProgressForm : Form

{

string destFile, srcFile;

public CopyProgressForm(string destFile, string srcFile)

{

InitializeComponent();

Control.CheckForIllegalCrossThreadCalls = false;

this.destFile = destFile; // 要复制的源文件名称

this.srcFile = srcFile; // 要复制到的目标文件名称

}

private void CopyProgressForm_Load(object sender, EventArgs e)

{

this.Show();

// 在此处创建多线程复制文件

Thread thread = new Thread(new ThreadStart(this.CopyProcess));

thread.IsBackground = true;

thread.Start();

}

void CopyProcess()

{

FileStream src = null,dest = null;

try

{

src = new FileStream(this.srcFile, FileMode.Open, FileAccess.Read, FileShare.Read);

dest = new FileStream(this.destFile, FileMode.Create, FileAccess.Write, FileShare.None);

long size = src.Length;

long currBytes = 0;

byte[] buffer = new byte[1024];

int length = 0;

do

{

length = src.Read(buffer, 0, buffer.Length);

currBytes += length;

this.pgrProgress.Value = (int)(currBytes * 100 / size);

dest.Write(buffer, 0, length);

}

while (length != 0);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);

}

finally

{

if (src != null)

src.Close();

if (dest != null)

dest.Close();

this.Close();

}

}

private void btnCancel_Click(object sender, EventArgs e)

{

this.Close();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: