C# 线程(ref)问题
本人用C#做一个FTP下载的软件。myftpClient.Get(@filepath, @LU, @filepath, ref f);这是下载的类,ret f用来传递显示下载字节, int iBytes = socketData.Receive(buffer, buffer.Length, 0); f += iBytes;就是类中读取下载字节数。用ref函数传递,页面以时钟刷新f显示字节数。我这个是开辟新的线程做的,可不知什么原因,有时候下载到一半时,这个线程不动没反应了,页面f显示的子节数据停止了。不知什么原因。请高人帮助我。 --------------------编程问答-------------------- 是不是线程终止了?或者挂起了
你给个代码截图啊 --------------------编程问答-------------------- 线程一定结束了
不如试用while循环搞它看看 --------------------编程问答-------------------- catch一下异常信息 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- while (true)
{
//System.Threading.Thread.Sleep(20);
int iBytes = socketData.Receive(buffer, buffer.Length, 0);
t += iBytes;
output.Write(buffer, 0, iBytes);
if (iBytes <= 0)
{
break;
}
}
我就是用这个去循环的,t += iBytes;这个t,就是返回界面下载的字节数,可其实没下载完,这个T的值就静止了。UI主线程还能动,不知什么原因。线程不会跑了,请各位帮帮我。
--------------------编程问答-------------------- 不动了?多半是Receive被阻塞了,没有接收到服务器发来的数据了。
这个你要看看FTP的信息交换规则,看看有没有在什么情况下它会停止发送数据。 --------------------编程问答-------------------- 应该是线程序内出现异常退出了 --------------------编程问答-------------------- try ,catch --------------------编程问答-------------------- 捕获异常看看 --------------------编程问答-------------------- 页面以时钟刷新f显示字节数
这是一种多么严重的错误设计啊!!!! --------------------编程问答--------------------
我想请问个为什么说是个错误啊,我不怎么明白,请赐教 --------------------编程问答--------------------
你没有错,timer中可以放一些状态,但是不能放业务逻辑,
timer中
你可以btn1.Text=f;
但不能出现长时间的过程。。 --------------------编程问答-------------------- 我说的这个“错误”不是指BUG也不是指代码有问题,是指这种设计方法不太好,最好是用委托之类的来刷新UI界面
不过这个说到底也无所谓
补充:.NET技术 , C#