.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。 Thread clientservice = new Thread(new ThreadStart(ReceiveData));
clientservice.IsBackground = true ;
clientservice.Start();
clientservice.IsBackground = true ;
clientservice.Start();
解决方案 »
- 关于DateTime.Now
- datagridview批量修改单元格值呢???就是我选定的单元格,我输入一个值,我所选的所有单元格都等于这个值
- 关于页面导入命名空间,和DataList内数据绑定
- 一句话就可解决的小问题,顺便散分
- 请教关于datatable的问题
- 如何读写Wave 文件?
- 能否继承Control类?如何继承Control类?
- 我在asp.net中发送Email不成功,请帮忙
- 请问 在win2000的搜索选项中显示日期的文本框如何做的?
- mscorlib.dll的问题还没有解决!大家帮忙!着急!!!
- Duwamish中CustomerData的一段代码求助
- 用C#写数据库连接类时,有些问题请教
while(isrunning)
{
这里进行recv处理;
如果接收到一个特殊的字符的话(这个控制符自己定,不大可能重复就可以),判断这个信息是不是本机发出的,如果是的话,将isrunning设为false;退出线程
}
这样的话,在退出程序的时候,你向自己的线程发一个退出的控制符即可。
我写了一个程序,开启一个线程(设置为前台线程 IsBackground = false),我可以直接关闭程序阿,而且线程然在运行,这是为什么?不是说“应用程序必须运行完所有的前台线程才可以退出”吗?
是这样理解的,你设为前台进程后,可以直接关闭可以直接关闭程序阿,而且线程然在运行,这点你也确定了,那么就对了,线程仍然在运行就说明实际上应用程序没有完全退出啊,要知道这个正在运行的线程也是你刚才运行的应用程序的一部分。表面上你是关闭了应用程序,实际上它没有完全退出,它里面的线程依然在运行如果设为后台线程
程序退出后
线程不是马上就退出,这是CLR自动管理的
所以即使结束应用程序,短时间内在任务管理器里面还是可以看到
等一段时间会自动停止后台线程
另外一种方法是如 pkzl888() 在线程里面设标志,通过检测标志来使线程退出,这样退出快些。