转自原文 在C#中如何判断线程当前所处的状态

在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象。

   ThreadState 为线程定义了一组所有可能的执行状态。一旦线程被创建,它就至少处于其中一个状态中,直到终止。在公共语言运行时中创建的线程最初处于Unstarted状态中,而进入运行时的外部线程则已经处于Running状态中。通过调用 Start可以将Unstarted线程转换为Running状态。并非所有的ThreadState值的组合都是有效的;例如,线程不能同时处于Aborted和Unstarted状态中。
   因此判断线程当前的状态必须用bitmask按位运算来达到判断目的,不能直接使用相等来判断。
 
  定义ThreadState如下:  
  

   
   1.判断线程是否处于取消状态
   A.错误的判断
    (MyThread.ThreadState == ThreadState.AbortRequested)   

B.正确的判断

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

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

   (MyThread.ThreadState == ThreadState.Running)
 
 

C#中如何判断线程当前所处的状态的更多相关文章

  1. 在C#中如何判断线程当前所处的状态

    在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象.   ThreadState 为线程定义了一组所有可能的执行状态.一旦线程被创建,它就至少 ...

  2. 在C#中怎样推断线程当前所处的状态

    在C#中怎样推断线程当前所处的状态 老帅       在C#中.线程对象Thread使用ThreadState属性指示线程状态.它是带Flags特性的枚举类型对象.    ThreadState 为线 ...

  3. wait()方法写在while循环中可以在线程接到通知后再一次判断条件

    wait()方法写在while循环中可以在线程接到通知后再一次判断条件 synchronized public String pop() { String returnValue = "&q ...

  4. C#如何判断线程池中所有的线程是否已经完成之Demo

    start: System.Threading.RegisteredWaitHandle rhw = null; new Action(() => { ; i < ; i++) { new ...

  5. C#如何判断线程池中所有的线程是否已经完成(转)

    其 实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用 ThreadPool.GetAvailableThr ...

  6. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  7. LoadTest中内存和线程Troubleshooting实战

    LoadTest中内存和线程Troubleshooting实战 在端午节放假的三天中,我对正在开发的Service进行了LoadTest,尝试在增大压力的条件下发现问题. 该Service为独立进程的 ...

  8. RxJava 以及 Android 中的通用线程解决方案、并发与线程安全

    关于RxJava如今是熟到发紫了,所以对于它底层的动作机制的了解是迫在眉睫了,费话不多说,直接开始. 这里还是以之前获取个人github仓库列表为例,用retrofit+rxjava,也是实际项目中用 ...

  9. Android中使用Thread线程与AsyncTask异步任务的区别

    最近和几个朋友交流Android开发中的网络下载问题时,谈到了用Thread开启下载线程时会产生的Bug,其实直接用子线程开启下载任务的确是很Low的做法,那么原因究竟如何,而比较高大上的做法是怎样? ...

随机推荐

  1. Linux usleep for shell

    /**************************************************************************** * Linux usleep for she ...

  2. iOS 5 :一个UIPageViewController程序示例

    原文:http://www.techotopia.com/index.php/An_Example_iOS_5_iPhone_UIPageViewController_Application 在Xco ...

  3. Oracle分组函数实例

    分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...

  4. sphinx-1.3.0扩展在pPHP 7.0.7版本编译不通过

    在这个网友也是在php7上面编译插件不通过 https://bugs.php.net/bug.php?id=71586 下php7对应的扩展文件即可 http://git.php.net/?p=pec ...

  5. nginx虚拟机的配置

    user nginx nginx;worker_processes 1;pid /data/var/run/nginx/nginx.pid;worker_rlimit_nofile 51200; ev ...

  6. Docker的一些常用

    日常使用的一些命令 1234567891011121314 docker pull mysql:tags // 拉mysql的tag版本 docker run -it -p(端口映射-主机端口:容器端 ...

  7. jeecg选择按钮带入其他单据值

    前端的标签 <input class="inputxt" id="fshimian" name="fshimian" ignore=& ...

  8. Ubuntu 16.04配置OpenGL教程

    sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo apt-get install libgl ...

  9. c#通过app.manifest使程序 右键 以管理员身份运行

    c#通过app.manifest使程序以管理员身份运行 时间:2013-06-27 22:47来源:网络收集+本站整理 作者:jtydl 点击: 1175 次 微软在Windows Vista开始引入 ...

  10. clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案

    clientHeight , scrollHeight , offsetHeight相信每个人都用过,可是每次用都要查一下到底哪个是文档大小哪个是视口大小,还有头疼的兼容问题. 先来官方的了解一下这三 ...