还是lable显示问题

wujun_dry 2010-08-14 02:20:17
问题:我执行完一个传输后,后面的状态lable3变成“√”,开始新的传输后再变成“×”,现在的问题是如果我使用messageBox后lable3就能正常显示,如果注释掉messageBox后就lable3不能正常显示了,求解决。

谢谢!!

程序代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace myUpload
{
public partial class form1 : Form
{
public form1()
{
InitializeComponent();
}
private FtpStatusCode UploadFun(string fileName)
{
Stream requestStream = null;
FileStream fileStream = null;
FtpWebResponse uploadResponse = null;

//显示原文件路径
label2.Text = fileName;
label3.Text = "×";
Application.DoEvents();
label2.Refresh();
label3.Refresh();
//构造目标路径
FileInfo fileInf = new FileInfo(fileName);
string uploadUrl = "ftp://192.168.4.88/tempUpload/" + fileInf.Name;

try
{
//连接ftp服务器
FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uploadUrl);
uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;
uploadRequest.Proxy = null;
NetworkCredential nc = new NetworkCredential();
nc.UserName = "dry";
nc.Password = "123456";
uploadRequest.Credentials = nc;

//上传
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;
label3.Text = "√";
//MessageBox.Show(fileName + "文件上传成功!");
break;

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

}

}
requestStream.Close();
uploadResponse = (FtpWebResponse)uploadRequest.GetResponse();
return uploadResponse.StatusCode;

}
catch (UriFormatException ex)
{
MessageBox.Show(ex.Message);
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (uploadResponse != null)
uploadResponse.Close();
if (fileStream != null)
fileStream.Close();
if (requestStream != null)
requestStream.Close();

}
return FtpStatusCode.Undefined;
}
private void upLoadButton_Click(object sender, EventArgs e)
{
UploadFun(@"D:\NBA\tmac_dunking.flv");
UploadFun(@"D:\NBA\tamc nba成长之路.flv");
}

}
}
...全文
566 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqlinhai 2010-08-14
  • 打赏
  • 举报
回复
我承认我是刷分的
dylike 2010-08-14
  • 打赏
  • 举报
回复
{
progressBar1.Value = progressBar1.Maximum;
label3.Text = "√";
不知道C#里有没有这句: Application.Doevents()
//MessageBox.Show(fileName + "文件上传成功!");
break;

}
qqiuzaihui 2010-08-14
  • 打赏
  • 举报
回复
你这代码不太好测, 用委托试试:
        public delegate void SetLableHandler(string str);
public SetLableHandler setTest;

private void Form_Load(object sender, EventArgs e)
{
this.setTest += SetLableTest;
}
private void SetLableTest(string str)
{
label3.Text = str;
label3.Refresh();
}

然后, 把
label3.Text = "√";

替换成:
this.BeginInvoke(this.setTest, new object[] { "√" });
rcy5211314 2010-08-14
  • 打赏
  • 举报
回复
你试试使用线程来做
rockets2008 2010-08-14
  • 打赏
  • 举报
回复
等待中
ych39933184 2010-08-14
  • 打赏
  • 举报
回复
當點擊的時候 代碼 寫 =true ; 就行了
Rain_Franklin 2010-08-14
  • 打赏
  • 举报
回复
关注..
cjh200102 2010-08-14
  • 打赏
  • 举报
回复
跟进。。
wujun_dry 2010-08-14
  • 打赏
  • 举报
回复
自己动手,丰衣足食
wujun_dry 2010-08-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aduwuhan 的回复:]
看不到整个程序,也就不是很好下手测试。
我只建议在你的程序中开始新的传输时,将label3再手动设置成“X”就行了(label3.Text = "X"))。
[/Quote]

我好像是这么搞的。每次调用的时候我都把lable3变成"x"的,郁闷。
aduwuhan 2010-08-14
  • 打赏
  • 举报
回复
看不到整个程序,也就不是很好下手测试。
我只建议在你的程序中开始新的传输时,将label3再手动设置成“X”就行了(label3.Text = "X"))。
wujun_dry 2010-08-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lgz851013 的回复:]
帮顶起 111111111
[/Quote]

3Q!!!
wujun_dry 2010-08-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qqiuzaihui 的回复:]
估计了界面刷新的问题, 当你使用 MessageBox.Show(fileName + "文件上传成功!"); 这个语句弹出对话框之后, 界面就重新刷新了, 所以Label中的Text能更新显示。
你把 //MessageBox.Show(fileName + "文件上传成功!"); 这句替换为 label3.Refresh(); 应该就可以了。
[/Quote]

这个我试过,不行的,一直显示“X”,直到最后一个文件传完,才会显示 √
qqiuzaihui 2010-08-14
  • 打赏
  • 举报
回复
估计了界面刷新的问题, 当你使用 MessageBox.Show(fileName + "文件上传成功!"); 这个语句弹出对话框之后, 界面就重新刷新了, 所以Label中的Text能更新显示。
你把 //MessageBox.Show(fileName + "文件上传成功!"); 这句替换为 label3.Refresh(); 应该就可以了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧