C#为什么不能强行终止线程
2010-10-02 15:16
225 查看
不知道是c#设计疏忽还是我没找到方对,.net一直无法强行线程子线程的操作
不知道大家注意没有,如果子线程里有 死循环(有时间必须用循环)或子线程在进行一个阻塞式的操作,如影响队列里的消息,那么不能主线程用什么方式终止子线程都没门,
this.thread.Suspend();
this.thread.Abort()
通通不管用,得调用win32api去强行终止,我的妈呀.net又把你赶回win32时间了
Abort() 方法也只是建议子线程终止,而不是无条件强行终目,这个不好,比如应用程序要退出,子线程结束不了会一直驻留内存exe都不会退出进程,有什么办法强行终止子线程哈,不要说类似于(不要用死循环,无意义之类的话,那对阻塞式的操作怎么说呢)
这一句的时候把线程阻死了 System.Messaging.Message m = q.Receive();
不管等多少,线程都是死的
晕,简单点,把线程设置为后台线程不就得了,还要弄个你死我活的,找不到解决方案
后台线程,在你程序关闭的时候,它也会自动销毁的
你的程序代码设计得有点问题
可以试试在退出的时候用
System.Environment.Exit(System.Environment.ExitCode);
Application.Exit();
还用在那些线程开始前,使用它的属性IsBackground,好像是这个,把它设为true,这样在你程序结束的时候,线程也会自动结束
对什么啊
编程中的情况有太多种了。比如UDP通讯
比如我的软件中有一个主的等待线程,接收到一个有效消息后,就会分配一个端口,开启一个新的监听线程。
客户端会不断的向这个端口发送心跳包。
如果超时就认为是客户端断开了连接。客户端就要重新去主线程去申请端口。
当然我也要强行结束没有心跳包发来的 线程,关闭端口。怎么可能不断的开线程不销毁呢。
不知道大家注意没有,如果子线程里有 死循环(有时间必须用循环)或子线程在进行一个阻塞式的操作,如影响队列里的消息,那么不能主线程用什么方式终止子线程都没门,
this.thread.Suspend();
this.thread.Abort()
通通不管用,得调用win32api去强行终止,我的妈呀.net又把你赶回win32时间了
Abort() 方法也只是建议子线程终止,而不是无条件强行终目,这个不好,比如应用程序要退出,子线程结束不了会一直驻留内存exe都不会退出进程,有什么办法强行终止子线程哈,不要说类似于(不要用死循环,无意义之类的话,那对阻塞式的操作怎么说呢)
这一句的时候把线程阻死了 System.Messaging.Message m = q.Receive();
不管等多少,线程都是死的
晕,简单点,把线程设置为后台线程不就得了,还要弄个你死我活的,找不到解决方案
后台线程,在你程序关闭的时候,它也会自动销毁的
你的程序代码设计得有点问题
可以试试在退出的时候用
System.Environment.Exit(System.Environment.ExitCode);
Application.Exit();
还用在那些线程开始前,使用它的属性IsBackground,好像是这个,把它设为true,这样在你程序结束的时候,线程也会自动结束
对什么啊
编程中的情况有太多种了。比如UDP通讯
比如我的软件中有一个主的等待线程,接收到一个有效消息后,就会分配一个端口,开启一个新的监听线程。
客户端会不断的向这个端口发送心跳包。
如果超时就认为是客户端断开了连接。客户端就要重新去主线程去申请端口。
当然我也要强行结束没有心跳包发来的 线程,关闭端口。怎么可能不断的开线程不销毁呢。
如果等待连接的线程超时,它自己应该主动关闭,而不是等着别人关闭它。 如果你遇到无法协作(业务逻辑设计上可以看出会死循环)的线程,聪明的办法不是去想办法终止它,而是应该把这类代码从自己的系统中删除。 |
来源:英超直播 |
相关文章推荐
- 如何:创建和终止线程(C# 编程指南--MSDN)
- C# Ajax为什么我的刷新不能成功,高手看看
- 如何:创建和终止线程(C# 编程指南)
- 【c#】关于终止以及删除主进程创建的线程以及进程的方法
- C# 使用 CancellationTokenSource 终止线程
- 为什么线程不能调用fork
- 为什么unity不能调用含有GL线程的dll库
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- 广播接收器为什么不能开启线程?
- 关于c# 中“正在终止线程”的问题
- 为什么C#脚本不能直接更新
- C# CancellationTokenSource 终止线程
- C# 线程手册 第二章 .NET 中的线程 终止/等待线程
- 想要6000以上月薪?为什么要两手空空来?面试时为什么不带笔记本电脑?为什么不能展示成果?为什么C#语法不精?为什么SQL语句不熟悉?
- C#为什么不能像C/C++一样的支持函数只读传参
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- 为什么说invalidate()不能直接在线程中调用
- 为什么不推荐使用Thread.interrupted作为线程终止的判读条件
- C# 终止线程
- 为什么说invalidate()不能直接在线程中调用