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
    纠正:应该是只要任何一个“前台”线程在运行,程序就无法退出
  • 相关阅读:
    Javascript函数式编程要掌握的知识点讲解
    任务
    怎么添加项目到SVN上面
    随便写一点最近开发遇到的问题和解决方法 大部分关于laravel和php
    laravel 将数组转化成字符串 再把字符串转化成数组
    laravel 配置了自己的域名以后, localhost 无法访问 404 not found 的解决方法
    实习日记15
    php接收post过来的 json数据 例子
    数据库如何让自增id重置
    C#连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/leafyoung/p/687101.html
Copyright © 2011-2022 走看看