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


     在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)
     
     
    终止当前线程:
     
    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));

    }
  • 相关阅读:
    自己写的一些公共js方法
    node(03)--利用 HTTP 模块 URl 模块 PATH 模块 FS 模块创建一个 WEB 服务器
    node(03 fs文件模块)
    node (02 CommonJs 和 Nodejs 中自定义模块)顺便讲讲module.exports和exports的区别 dependencies 与 devDependencies 之间的区别
    node.js (01http 模块 url 模块)
    Ubuntu 16.04 下python2和python3及对应的pip的方法
    MySQL划重点-查询-聚合
    MySQL划重点-查询-条件
    MySQL命令
    使用Navicat for Mysql连接装在虚拟机Ubuntu16.04上的mysql服务器
  • 原文地址:https://www.cnblogs.com/xiaoerlang90/p/4229240.html
Copyright © 2020-2023  润新知