C# 当主程序关闭结束子线程

这篇博客讨论了在C#中如何在主程序关闭时正确结束子线程的问题。当子线程存在死循环或阻塞操作时,`this.thread.Suspend()` 和 `this.thread.Abort()` 方法可能无法有效终止线程。一些开发者建议在`FormClosing`事件中使用`Suspend`,但效果并不理想。有人提出使用`ForcedKillThread`方法结合`Abort()`和`Join()`强制终止,但也存在异常风险。此外,设置线程为后台线程在程序关闭时会自动销毁,但这并不适用于所有情况。博客引发了一场关于线程管理的讨论,提供了多种解决方案和建议。
摘要由CSDN通过智能技术生成

发表于:2008-02-03 15:15:17不知道是c#设计疏忽还是我没找到方对,.net一直无法强行线程子线程的操作
不知道大家注意没有,如果子线程里有 死循环(有时间必须用循环)或子线程在进行一个阻塞式的操作,如影响队列里的消息,那么不能主线程用什么方式终止子线程都没门,
  this.thread.Suspend();
                    this.thread.Abort()
通通不管用,得调用win32api去强行终止,我的妈呀.net又把你赶回win32时间了
Abort() 方法也只是建议子线程终止,而不是无条件强行终目,这个不好,比如应用程序要退出,子线程结束不了会一直驻留内存exe都不会退出进程,有什么办法强行终止子线程哈,不要说类似于(不要用死循环,无意义之类的话,那对阻塞式的操作怎么说呢)




对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:21 

LeoMaya

(postreetboy)

等 级:
#1楼 得分:0回复于:2008-02-03 15:31:21这个情况下, 试试在FormClosing事件里面把线程Suspend


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:本贴收集C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP),多多宜善。

buycode001

(fds)

等 级:
#2楼 得分:0回复于:2008-02-03 15:37:03楼上的真是知音啊,我的问题就是发生在这种情况,也这么处理,但是无效
  private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            try
            {
                if(this.thread != null)
                {
                    this.thread.Suspend();
                    this.thread.Abort();
                }
            }
            catch
            {
                MessageBox.Show("异常终止线程");
            }
        }
照说来 Abort 一定会引发异常,可是却没有,奇怪


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:SQLServer2005 String类的移植尝试

tuyile006

(小y)

等 级:
#3楼 得分:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值