zoukankan      html  css  js  c++  java
  • C#线程:只要任何一个线程在运行,程序就不退出?!

    第一次使用线程相关的东西就遇到一个很“奇怪”的问题,明明程序(或者说主线程)已经结束了,但是整个程序就是不退出,赖在进程列表里面!因为以前从来没遇到这个问题,而这个程序是我首次使用线程(土了点,呵呵),问题肯定是出在这里了,因此写了一个控制台程序进行验证,代码如下:
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 using System.Net;
     5 using System.Net.Sockets;
     6 using System.Threading;
     7 
     8 namespace Test
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             Thread testThread = new Thread(new ThreadStart(Program.TestThread));
    15             testThread.Name = "testThread";
    16             testThread.Start();
    17         }
    18 
    19         static void TestThread()
    20         {
    21             while (true)
    22             {
    23                 Thread.Sleep(0);
    24             }
    25         }
    26     }
    27 }
    28 

    运行上面这个例子,由于线程testThread是个死循环,所以这个线程是不会退出的。但是我的期望是主线程一旦结束,就意味着程序要退出了,那么那些辅助线程应该自动被结束才是。但显然从上面的实验代码运行结果可以看出:只要存在任何一个活动线程,那么进程就持续运行!

    要解决这个问题也非常简单,在Main函数的结尾添加一行:
    1 testThread.Abort();

    那么就一切正常了,不过感觉有点多此一举,而且不明白为什么这么设计,系统完全可以自动帮我们这么做了嘛,难道有什么难以预料的不良后果么???

    // update
    纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出
  • 相关阅读:
    swfupdate flash上传工具
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服 务器。请验证实例名称是否正确并且 SQL Server 已配置为允
    多对多 一对一 一对多 主从 关联 字典
    JavaScript面向对象
    vue的transition过渡效果
    【译】Learn ES2015——箭头函数
    vue的选项
    JavaScript模块化
    vue-router
    vuex是啥
  • 原文地址:https://www.cnblogs.com/leafyoung/p/687101.html
Copyright © 2011-2022 走看看