源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#中前台线程和后台线程的区别与联系

  • 时间:2021-09-19 07:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#中前台线程和后台线程的区别与联系
前台线程和后台线程的区别和联系: 1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。 2、可以在任何时候将前台线程修改为后台线程,方式是设置[url=http://msdn.microsoft.com/zh-cn/library/system.threading.thread.isbackground.aspx]Thread.IsBackground[/url] 属性。 3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。 4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。   下面做个小例子来证实一下,代码如下很简单:
class Program
  {
static AutoResetEvent autoEvent =new AutoResetEvent(false);

staticvoid Main()
    {
      Thread newThread =new Thread(new ThreadStart(ThreadMethod));
//newThread.IsBackground = true;
      Console.WriteLine("主线程开始执行。");
      newThread.Start();

      Console.WriteLine("主线程结束");
    }

staticvoid ThreadMethod()
    {
//挂起子线程 
      autoEvent.WaitOne();
      
      Console.WriteLine("子线程执行");
    }
  }
我在第9行下了个断点,来看一下通过 new Thread方式创建的线程的IsBackground属性,截图如下: [img]http://files.jb51.net/file_images/article/201506/2015617104751206.jpg?2015517104819[/img] 可见通过new Thread方式创建的线程,确实是默认为前台线程。   程序运行的结果如下图: [img]http://files.jb51.net/file_images/article/201506/2015617104836380.jpg?2015517104846[/img] 该控制太程序没有像平时一样自动关闭,而使一直停在那里。并且我们从图中可以看到主线程执行完了,而子线程(前台线程)并没有执行完(因为被autoEvent.WaitOne()方法挂起了)。 这就说明了前台线程是可以阻止进程的终止的。 如果将第8行的注释去掉的话,控制台程序将自动终止,大家可以试一下。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部