线程的终止问题。痛苦ing。

mobydick 2003-12-17 09:04:25
最近写了一个使用Socket进行通信的小东东。开了一个线程用于监听,但是在程序终止时这个线程不会被终止,只能用任务管理器中的<终止线程>按钮。我想实现的功能如下:

一个Form,上有两个Button,其中一个Button,开始线程
while(true)
{
Thread thread = new Thread(new ThreadStart(accp));
}
另一个Button结束线程,那这个方法应该怎么写呀?
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_clove 2003-12-18
  • 打赏
  • 举报
回复
你使用的是阻塞式的Socket?在侦听消息时线程可能不会被终止
设置Blocking为false试试。
gOODiDEA 2003-12-18
  • 打赏
  • 举报
回复
参考:

public class MyThread

{

public static void Work()

{

try

{

for( int i = 0; i < 4; i++ )

{

Console.WriteLine( Thread.CurrentThread.Name + "正在计算" + i.ToString() );

Thread.Sleep( 50 );

}

}

catch( ThreadAbortException e )

{

Console.WriteLine( "错误信息:{0}", e.Message );

Thread.ResetAbort();//取消主线程要求中止的请求,如不执行则ThreadAbortException会在catch块末端再次引发

}

Console.WriteLine( Thread.CurrentThread.Name + "完成工作!" );

}

}



class ThreadAbortTest

{

public static void Main()

{

Console.WriteLine( "主线程启动!");

Thread thread = new Thread( new ThreadStart( MyThread.Work ) );//MyThread.Work代表要执行的线程函数,它可以是静态的,也可以是某个类实例的方法,它是要执行的线程函数的委托

thread.Name = "MyThread";

thread.Start();//线程启动后将被CPU调度,但不一定是马上执行,所以同样的例子在不同的机器上可能会有不同的结果。

Console.WriteLine( "主线程第一次休眠!");

Thread.Sleep( 100 );

Console.WriteLine( "MyThread被挂起!");

thread.Suspend();//挂起子线程

Console.WriteLine( "主线程第二次休眠!");

Thread.Sleep( 100 );

Console.WriteLine( "MyThread被恢复!");

thread.Resume();//恢复子线程

thread.Abort();//终止子线程

thread.Join();//直到到子线程完全终止了,主线程才继续运行

Console.WriteLine( "主线程终止!" );

Console.ReadLine();

}

}
13880079673 2003-12-17
  • 打赏
  • 举报
回复
Abort是强制关闭线程,不大好
13880079673 2003-12-17
  • 打赏
  • 举报
回复
定义一个bool全局变量
在结束按钮里面重设它
在你的线程里面判断
速马 2003-12-17
  • 打赏
  • 举报
回复
// 但是在程序终止时这个线程不会被终止

如果函数可以正常返回,那自己就会中止,无需显式调用Abort()
速马 2003-12-17
  • 打赏
  • 举报
回复
thread.Abort();

110,567

社区成员

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

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

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