社区
C#
帖子详情
C#中线程的销毁
csdn小虫
2010-03-22 05:23:27
Thread myThread; //声明一个线程
...
现在程序要退出,我要销毁线程后,然后再退出程序。
如果线程正在执行,我执行myThread.Abort(); 程序正常。
如果线程整处于挂起的状态,我执行myThread.Abort()就会出现异常。
所以,我就判断,如果线程是挂起状态,我就唤醒线程,然后再执行Abort()方法。
这样做合理么?
...全文
3798
24
打赏
收藏
C#中线程的销毁
Thread myThread; //声明一个线程 ... 现在程序要退出,我要销毁线程后,然后再退出程序。 如果线程正在执行,我执行myThread.Abort(); 程序正常。 如果线程整处于挂起的状态,我执行myThread.Abort()就会出现异常。 所以,我就判断,如果线程是挂起状态,我就唤醒线程,然后再执行Abort()方法。 这样做合理么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
技术小牛
2011-05-26
打赏
举报
回复
这个要顶,有结果没,楼主。争论了半天
csdn小虫
2010-04-15
打赏
举报
回复
多线程执行,为了同步,多线程执行方法中用了Mutex互斥对象。
现在又如下情况:
比如 目前有 10 条线程,已经处于挂起状态,程序要退出该怎么做??
如果线程正在运行,程序要退出该怎么做?
ljqqqq836
2010-04-15
打赏
举报
回复
关注下。
walkghost
2010-04-15
打赏
举报
回复
[Quote=引用 1 楼 carpathia 的回复:]
System.Environment.Exit(0);可以退出程序所有的后台线程,并关闭程序
如果严格的话,最好采用某个标识来让线程退出,比如thread在运行的过程中,需要判断一个bool flag,如果为true,则线程正常运行,当想终止线程时,将flag设置为false,线程在后台检测到后,直接将线程主方法return,则线程结束
[/Quote]
System.Environment.Exit(0);是不安全的退出方法。
csdn小虫
2010-04-15
打赏
举报
回复
还有一个问题
有两个线程,执行的方法分别是:
private void Execute1()
{
aaa;
bbb;
thread2.Join();
ccc;
}
private void Execute2()
{
111;
222;
333;
}
定义两个线程,同时执行后,为什么线程1中,遇到Thread2.Join()后,
他会等待Execute2的方法执行完毕。
但是Execute2执行完毕后,为什么Execute1中,Thread2.Join()后面的代码不会执行,
并且,线程1的状态变成Stopped状态????
不是说,线程1会等待线程2执行完毕后,然后会继续剩下的代码么?????
Joe-xXx
2010-04-15
打赏
举报
回复
try
{
myThread.Abort();
myThread.Join();
}
catch
{
}
妥协做法
wxhysoftsodc
2010-04-15
打赏
举报
回复
是个问题,等答案。
tfzdh
2010-04-15
打赏
举报
回复
关注下。
jackson35296
2010-03-24
打赏
举报
回复
把线程的属性设置为Background,这样程序退出的时候会自动结束线程,否则会卡住
yangfan1981
2010-03-24
打赏
举报
回复
极度不赞同强行结束线程。容易出现难以预料的bug。
建议楼主重新设计程序。
让线程在某种情况下,或者收到某个消息时,自己退出。
yingzhilian2008
2010-03-24
打赏
举报
回复
貌似有个属性 isactive判断一下吧!!
onlyprice
2010-03-23
打赏
举报
回复
最好的处理方式:设置一个全局标识位isrunning= true;
线程处理函数,while( isruning){
}
要结束该线程时,将isruning= false;
这样线程就自动退出
码农星球撸码J
2010-03-23
打赏
举报
回复
[Quote=引用 6 楼 zzx509 的回复:]
线程原有的一些挂起、恢复方法都过时了。
AutoResetEvent,你查看下这个类。
[/Quote]
同意
lethwei
2010-03-23
打赏
举报
回复
下面的文章对 .net 中的线程状态, 及中断方法做了比较系统的介绍, 有兴趣可以读一读
http://www.albahari.com/threading/part2.aspx#_Unblocking
lethwei
2010-03-23
打赏
举报
回复
[Quote=引用 5 楼 yuimison 的回复:]
上面有大侠提议 说 在 线程的执行方法中 判断一个flag标志,在决定线程是否要销毁,直接在线程方法内部执行Abort方法。
但是如果 线程挂起的时候,线程的方法不是判断不了flag标志了么????
[/Quote]
没错, 检查 flag 方法太过简单, 在线程处于挂起时无法起到作用, 配合 Thread.Interrupt() 的调用可以解决大部分时候的挂起问题, 这个时候线程方法会触发 ThreadInterruptedException 异常, 从而退出挂起状态, 然后就可以做线程的销毁处理了
honkerhero
2010-03-23
打赏
举报
回复
[Quote=引用 5 楼 yuimison 的回复:]
上面有大侠提议 说 在 线程的执行方法中 判断一个flag标志,在决定线程是否要销毁,直接在线程方法内部执行Abort方法。
但是如果 线程挂起的时候,线程的方法不是判断不了flag标志了么????
[/Quote]
那位说的是Thread定时Sleep吧,如果suppend确实不能这样用。
把正在执行的Abort掉,挂起的就直接调用System.Environment.Exit(0);吧,反正它也是闲着呢,一般不会有什么后遗症
zzx509
2010-03-23
打赏
举报
回复
线程原有的一些挂起、恢复方法都过时了。
AutoResetEvent,你查看下这个类。
csdn小虫
2010-03-23
打赏
举报
回复
上面有大侠提议 说 在 线程的执行方法中 判断一个flag标志,在决定线程是否要销毁,直接在线程方法内部执行Abort方法。
但是如果 线程挂起的时候,线程的方法不是判断不了flag标志了么????
csdn小虫
2010-03-23
打赏
举报
回复
如果线程执行的方法中正在执行Thread.Sleep(5000);
这时候,执行了挂起线程,那么线程能挂起么?
如果正在执行Thread.Sleep(5000); 这时候 销毁线程,又会如何?
csdn小虫
2010-03-23
打赏
举报
回复
System.Environment.Exit(0)
在窗体的Closed事件中写么?
加载更多回复(4)
C#
多
线程
编程实战完整源码
C#
多
线程
编程实战原书第二版 完整实例源码,非常好的
C#
多
线程
编程学习资源,需要VS2015。
C#
多
线程
排序例子
一个小小的例子,用简单排序小例子诠释多
线程
的用法和多
线程
的效率等
c#
多
线程
上位机
c#
上位机,采用多
线程
技术及模拟消息队列
C#
多
线程
解决界面卡死问题的完美解决方案
C#
多
线程
解决界面卡死问题的完美解决方案
C#
多
线程
编程实战Code源代码
C#
多
线程
编程实战Code源代码 资源是从华章出版社官网下载的
C#
111,094
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章