判断当前线程所处的状态 (转)以及终止当前线程

摘要:
在C#中,线程对象thread使用ThreadState属性来指示线程状态。它是一个具有Flags属性的枚举类型对象。ThreadState为线程定义了一组所有可能的执行状态。在公共语言运行库中创建的线程最初处于未启动状态,而进入运行库的外部线程已经处于运行状态。并非ThreadState值的所有组合都有效;例如,线程不能同时处于Aborted和Unstarted状态=02。判断线程是否正在运行是非常特殊的,因为ThreadState running本身等于0,并且不能使用&操作,因此可以使用以下方法来确定:Terminate the current thread:thread。当前线程。Abort()用于终止当前线程。
 在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象。
   ThreadState 为线程定义了一组所有可能的执行状态。一旦线程被创建,它就至少处于其中一个状态中,直到终止。在公共语言运行时中创建的线程最初处于Unstarted状态中,而进入运行时的外部线程则已经处于Running状态中。通过调用 Start可以将Unstarted线程转换为Running状态。并非所有的ThreadState值的组合都是有效的;例如,线程不能同时处于Aborted和Unstarted状态中。
   因此判断线程当前的状态必须用bitmask按位运算来达到判断目的,不能直接使用相等来判断。
 
   定义ThreadState如下:   
   判断当前线程所处的状态 (转)以及终止当前线程第1张
   
   1.判断线程是否处于取消状态
   A.错误的判断
    (MyThread.ThreadState == ThreadState.AbortRequested)   

   B.正确的判断

    (MyThread.ThreadState & ThreadState.AbortRequested) != 0
 
   2.判断线程是否处于运行状态   

   这个有一点特殊,因为ThreadState.Running本身等于0,不能用&运算,所以判断可用以下方法:

(MyThread.ThreadState == ThreadState.Running)
 
 
终止当前线程:
 
Thread.CurrentThread.Abort()用于终止当前线程。

当然了,你需求中不但要终止当前线程,还要执行别的业务,弹出form。那么就需要一个新的委托,在线程过程中调用这个委托来终止现成,从而达到在终止线程后执行其他业务。

大概代码,我就写个大概的:

public delegate void StopThreadDelegate(Thread t);
static void StopThread(Thread t)
{
//关闭线程
t.Abort();
//启动新窗体
}
public static void Main()
{
new Thread(delegate(object data)
{
//这里是你的执行逻辑
//当要执行退出线程时
dynamic d = data;
//var d = (StopThreadDelegate)data; //非4.0
d(Thread.CurrentThread);
}).Start(new StopThreadDelegate(StopThread));

}

免责声明:文章转载自《判断当前线程所处的状态 (转)以及终止当前线程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安卓ADB进不去的几种情况及处理!解读支付宝接口实现步骤下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QT 线程内定时器QTimer无效问题解决方案

在大批量数据处理时,需要长时间等待,这就需要有进度条显示处理进度,因此也就需要建立一个定时器,来实时更新进度条。 数据处理在单独的子线程中进行,在子线程中new一个定时器,但是定时器并没能实时触发更新(update())函数,直到数据处理完了之后,才会触发,也就是说数据处理堵塞了定时器的触发,为了实现定时器的实时触发,则需在子线程内新建一个线程来运行定时器...

JVM基本讲解

 1.数据类型     java虚拟机中,数据类型可以分为两类:基本类型和引用类型。     基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。     “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。     基本类型包括:byte、short、int、long、char、flo...

Python thread & process

线程 点击查看 <- 进程 点击查看 <- 线程与进程的区别 线程共享内部空间;进程内存空间独立 同一个进程的线程之间可以直接交流;两个进程之间想通信必须通过一个中间代理 创建新线程很简单,占用资源较少;创建新进程是对父进程的克隆,会占用很多资源 一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程 修改父线程可能会影响到进程下...

[RTOS]--uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点

本篇博客就来细数这几个RTOS的特点。   以下内容均来自官方网站或者官方手册Feature的Google翻译的加了我的一些调整,没有任何主观成分。 1. FreeRTOS   FreeRTOS是专为小型嵌入式系统设计的可扩展的实时内核。 亮点包括: 微小的封装形式。 免费的RTOS调度程序 免费嵌入式软件源代码。 免版税。 抢占式,协作式和混合配置...

Django项目常见面试问题

1.python中的lambda是什么意思,可以举例 1 匿名函数 2 a = lambda x:x+1 3 print(a(1)) 2.请写出以下代码执行的结果 1 class Parent(object): 2 x = 1 3 class Child1(Parent): 4 pass 5 class Child2(Parent): 6 pa...

node.js

JavaScript单线程的误解 在我接触JavaScript(无论浏览器还是NodeJS)的时间里,总是遇到有朋友有多线程的需求。而在NodeJS方面,有朋友甚至直接说到,NodeJS是单线程的,无法很好的利用多核CPU。 诚然,在前端的浏览器中,由于前端的JavaScript与UI占据同一线程,执行JavaScript确实为UI响应造成了一定程度上的麻...