时间:2021-05-20
本文实例讲述了C#实现终止正在执行的线程的实现方法,并针对一些容易出错的地方进行了深入分析,具体方法如下:
一般来说,很多人都会使用Abort方法来终止线程,其实这种做法并不可取!如果你的线程正在操作临界资源,很有可能会造成资源没有正确释放而出现死锁问题。正确的做法应该是使用标记来终止线程的执行。
基本思路是:定义一个用于描述“停止”信号的变量,在整个程序启动前,设置该变量为false。在线程中,循环判断该变量是否已经被设置为true,如果没有,则继续执行,否则就退出循环并释放资源,然后退出执行。当我们需要线程退出时,只要设置这个“停止”信号为true即可。
下面我们来看具体的操作步骤。
首先定义一个“停止”信号变量:
private volatile bool canStop = false;注意这里我们使用了volatile关键字,因为canStop变量将会被调用线程和执行线程同时使用,即在调用线程中初始化以及设置它的值,而在执行线程中判断它的值。这样做就告诉编译器,这个canStop变量将被多个线程所使用,强制编译器不对其状态进行优化。如果有兴趣可以上MSDN查看关于这个volatile关键字的更多解释。此处同时也给canStop做了初始化。
现在我们看看线程的创建与执行的代码:
很简单,在线程的执行体中反复判断canStop变量是否为true,若是则立刻跳出while循环(停止变量的自加以及更新界面的操作),然后重新初始化canStop变量为false,以便于下次的使用。
希望本文所述对大家的C#程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
线程状态NEW:刚创建未启动的线程RUNNABLE:正在执行状态BLOCKED:处于阻塞状态的线程WAITING:正在等待另一个线程执行特定动作的线程TIMED
本文实例讲述了C#实现向多线程传参的三种方式。分享给大家供大家参考,具体如下:从《C#高级编程》了解到给线程传递参数有两种方式,一种方式是使用带Paramete
本文实例讲述了C#调用执行外部程序的实现方法。分享给大家供大家参考。具体分析如下:这里以调用notepad为例演示C#调用执行外部程序的方法。classTest
本文实例讲述了C#接口实现方法。分享给大家供大家参考。具体如下:在讲解C#实现接口的实例解析之前我们来看看C#接口的定义,如果一个类派生于一个接口,它就会执行某
开发语言:C#3.0IDE:VisualStudio2008一、C#线程概述在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多