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/

前辈,我是菜鸟,刚刚试了你的代码,还是不行啊,多线程的时候主窗体仍然会卡死的。
wujun @ 2010年八月 12日 |
你检查下多线程的线程名称是否冲突
bordf @ 2010年八月 12日 |
我检查了,我每次创建线程的名字都不一样的。还是会出错。
wujun @ 2010年八月 12日 |
已经回复你的邮件了 呵呵~ 问题不在FTP上传程序上,在于FTP服务器的 数据处理上~
bordf @ 2010年八月 13日 |