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