永发信息网

C# Form 线程错误 正在中止线程

答案:3  悬赏:50  手机版
解决时间 2021-04-26 21:31
C# Form 线程错误 正在中止线程
最佳答案
您好,

如果方便,请补充一下Lis方法的代码,我感觉错误应该是出在这里。

谢谢。

====================================

您好,

看过Lis代码,有些明白。

建议您从这个方向考虑一下:
线程Start后,会异步执行Lis方法,此时如果没有Client连接,则Socket应该处于StandBy状态也就是它会挂起当前线程以等待连接。而此时您About了线程,而线程正忙着监听,所以……自然会出现异常,但这个异常只不过是线程结束缓慢而已,并不属于严重或致命错误,如果您取消Try块,很可能此错误不会被IDE捕获。

我想大概是这个原因,您可以尝试写个方法在退出线程前把Socket Shutdown掉试试,如果没有异常,那问题就是出在这里了。

谢谢。
全部回答
百度的问题补充字数有限,所以再申请了个号..
下面这些我测试是可以的,不过,就是在Lis()里把所有代码 加上catch后不行
有些时候,就出现 正在中止线程,,
调试时,我在进入Lis()时设断点,它会卡住很久,才有反映..
前些时候,这个程序没有出现这个问题,,
代码如下:
S端:
////客户端节点
private IPEndPoint client;
////服务器端Socket
private Socket server;
////服务器端监听线程
private Thread thdSvr;
////网络数据流
NetworkStream stream;
////写数据流
TextWriter writer;
////读数据流
TextReader reader;
private void Lis(){
client = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 34567);
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Blocking = true;
server.Bind(client);
server.Listen(0);
while (true)
{
Socket t = server.Accept();
if (t != null)
{
stream = new NetworkStream(t);
writer = new StreamWriter(stream);
reader = new StreamReader(stream);
this.richTextBox1.Text += "接收到一个连接。。。\n";
writer.WriteLine("欢迎连接到服务器!");
writer.Flush();
writer.WriteLine("你现在可以说话了");
writer.Flush();
string str = reader.ReadLine();
if (str == "你好,服务器,很高兴能和你通讯,谢谢。")
{
this.richTextBox1.Text += str;
this.richTextBox1.Text += "\n";
}
label1.Text = ((IPEndPoint)t.RemoteEndPoint).Address.ToString();//获得客户IP

reader.Close();
writer.Close();
stream.Close();
t.Close();
}
}
}
在C端:
////客户端节点
private IPEndPoint client;
////服务器端Socket
private Socket server;
////服务器端监听线程
private Thread thdSvr;
////网络数据流
NetworkStream stream;
////写数据流
TextWriter writer;
////读数据流
TextReader reader;
//连接服务器
private void button1_Click(object sender, EventArgs e)
{
//服务器IP地址
serIP = IPAddress.Parse("127.0.0.1");
server = new IPEndPoint(serIP, 34567);
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(server);
if (client.Connected)
{
stream = new NetworkStream(client);
writer = new StreamWriter(stream);
reader = new StreamReader(stream);
richTextBox1.Text += "连接到服务器。。。\n";
richTextBox1.Text += reader.ReadLine();
richTextBox1.Text += reader.ReadLine();
richTextBox1.Text += "\n";

writer.WriteLine("你好,服务器,很高兴能和你通讯,谢谢。"); //stream.Read(byyybuffer, intoffest, intsize);
writer.Flush();
reader.Close();
writer.Close();
stream.Close();
client.Close();
}
}
谢谢两位!!!!
====================================
答 david_zha0:
谢谢!,我也发现了可能是因为中断线程而产生的Exception,我发现我写的的线程中止都会有这个问题,它的错误信息是"正在中止线程.",,所以这可能也不是个问题..
您说的,,用Shutdown,我试过,在停止线程前作用.但出错的,,其实,我想和这个没关系,因为Shutdown应该是指,在通信还未断开前使用的.如果断开连接,那这方法的使用就会引发异常了.而我的通信只一次交互(读与写)即关闭连接,应该是不能用Shutdown的.
不知道对不对,,谢谢了,,
应该是你的网络流还没有关闭的原因,我以前遇上过这样的问题,在关闭线程之前,必须要先保证流已经全部关闭。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
‘门当户对’是对还是错呢?
为什么看PPS宽带会经常掉线啊 ??谁能帮帮我
谁知道这种电脑是什么品牌还有几个内存插槽和
卡兰奇酒庄在哪里啊,我有事要去这个地方
扶沟县王辉蛋品批发地址在什么地方,想过去办
怎么样逗女孩开心啊?
中国移动彩玲没有华丽的词语,只想在渐冷的冬
怎么才能算爱
为什么用手机登陆过QQ手机QQ的图标还是灰色的
爱人 的定义是什么?最简单的说法是?
56网朗读朱自清春的背景音乐是叫什么?我的空
铁锅羊汤我想知道这个在什么地方
VB 发送消息到指定程序
360杀毒永远免费下载
求魔兽真三中的典韦技巧?
推荐资讯
手机QQ的流量多吗,需要刷新的吗?只聊天的话
阳光宝贝老坝港店这个地址在什么地方,我要处
200字左右的文言文帶翻譯
河北圣元优博有问题吗
单选题She fell into trouble&nbs
QQ农场里面种哪些农作物获得的经验比较高?
半屏山 普通话版的歌 从哪找? 最好带简谱的
怎样参加考专辑评选
女人更年期吃什么调理,50岁女人更年期吃什么
本溪市的手机卡在本溪县用是不是长途加漫游
期末怎么复习?
脚崴了怎么才能好得快一点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?