c#使用ftp上传多线程技术实现 progressBar显示不卡死代码

分类: c# | 标签: | 日期:2009-10-10

using System.Net;
using System.IO;
using System.Threading;
记得添加他们~
public string doc, fname, tname;

private FtpStatusCode UploadFun(string fileName, string uploadUrl)
{
Stream requestStream = null;
FileStream fileStream = null;
FtpWebResponse uploadResponse = null;
try
{
FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uploadUrl);
uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;

uploadRequest.Proxy = null;
NetworkCredential nc = new NetworkCredential();
nc.UserName = “ftp账号名称”;
nc.Password = “ftp密码”;

uploadRequest.Credentials = nc; //修改getCredential();错误2

requestStream = uploadRequest.GetRequestStream();
fileStream = File.Open(fileName, FileMode.Open);

byte[] buffer = new byte[1024];
int bytesRead,i,t;
i = Convert.ToInt32(fileStream.Length);

t = i/1024;
progressBar1.Value = 0;

progressBar1.Maximum = t + 2;
while (true)
{

bytesRead = fileStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
progressBar1.Value = progressBar1.Maximum;
MessageBox.Show(“文件上传成功!代码生效!”);
break;

}
else
{
requestStream.Write(buffer, 0, bytesRead);
progressBar1.Value++;

}

}
requestStream.Close();

uploadResponse = (FtpWebResponse)uploadRequest.GetResponse();
return uploadResponse.StatusCode;

}
catch (UriFormatException ex)
{
}
catch (IOException ex)
{
}
catch (WebException ex)
{
}
finally
{
if (uploadResponse != null)
uploadResponse.Close();
if (fileStream != null)
fileStream.Close();
if (requestStream != null)
requestStream.Close();
}
return FtpStatusCode.Undefined;

}
private void BackgroundProcess()
{
FtpStatusCode status = UploadFun(doc,tname );
}

private void button1_Click(object sender, EventArgs e)
{

fname = DateTime.Now.ToString(“yyMMddhhmmssms”) + “.flv”;
tname= “ftp://www.bordf.com.cn/bordf.txt; //要上传到的ftp的路径和文件名
/——
Thread th = new Thread(new ThreadStart(BackgroundProcess));
th.Start();
Control.CheckForIllegalCrossThreadCalls = false;//线程开始的时候加这么一句,可以解除不是本线程创建的windows控件会报错
—-/ 开新线程进行文件上传和进度条显示,对主form不产生卡死影响~

}

OpenFileDialog fDilag = new OpenFileDialog();
fDilag.Title = “选择要上传的FLV视频 “;
fDilag.InitialDirectory = @”d:\”; // 有了@ 就不用在路径上加//了!
fDilag.Filter = “视频文件(*.flv)|*.flv”;
fDilag.FilterIndex = 2;
fDilag.RestoreDirectory = true;
if (fDilag.ShowDialog() == DialogResult.OK)
{
doc = fDilag.FileName;
textBox1.Text = doc;

这个是文件选择的~
}

网络代码+自己构思,产生此工具~
转载请注明 来自http://www.bordf.com.cn

声明:本文为耿振的博客 http://blog.bordf.com发布文章。转载务必注明出处

注意:转载须保留全文:请保留本文出处!否则耿振的博客将向你网站的主机商投诉。
本文永久地址:http://blog.bordf.com/261/


4人发表了评论  ↓发表评论↓
  • 前辈,我是菜鸟,刚刚试了你的代码,还是不行啊,多线程的时候主窗体仍然会卡死的。

    wujun @ 2010年八月 12日 | 回复

    • 你检查下多线程的线程名称是否冲突

      bordf @ 2010年八月 12日 | 回复

  • 我检查了,我每次创建线程的名字都不一样的。还是会出错。

    wujun @ 2010年八月 12日 | 回复

    • 已经回复你的邮件了 呵呵~ 问题不在FTP上传程序上,在于FTP服务器的 数据处理上~

      bordf @ 2010年八月 13日 | 回复

表情:<( ̄︶ ̄)> | (⊙ˍ⊙) | >﹏< | b( ̄▽ ̄)d | (─.─||) | (^_-)

[ Ctrl+Enter提交 ]