`
auauau
  • 浏览: 169115 次
社区版块
存档分类
最新评论

C# 多线程关闭的问题

阅读更多
原文: http://blog.csdn.net/xuxujian/article/details/3690058

最近在学习多线程程序的开发,但是启动了多个线程的程序在关闭的时候却出现了问题,如果程序退出的时候不关闭线程,那么线程就会一直的存在,但是大多启动的线程都是局部变量,不能一一的关闭,如果调用Thread.CurrentThread.Abort()方法关闭主线程的话,就会出现ThreadAbortException 异常,因此这样不行。
后来找到了这个办法:
Thread.IsBackground 设置线程为后台线程。
msdn对前台线程和后台线程的解释:托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。同样,通过将 IsBackground 设置为 false,就可以将线程指定为前台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。
所以解决办法就是在主线程初始化的时候,设置:
Thread.CurrentThread.IsBackground = true;
这样,主线程就是后台线程,在关闭主程序的时候就会关闭主线程,从而关闭所有线程。
但是这样的话,就会强制关闭所有正在执行的线程,所以在关闭的时候要对线程工作的结果保存。
分享到:
评论

相关推荐

    【C#多线程】 动态创建多个线程后 需要关闭其中某个线程的解决实例。

    例如: for (int i = 0; i ; i++) { ...如何关闭其中的一个线程呢? 请下载解决方案。 呵呵,这个实例10分值的买, 觉得好的话就评个分吧,评分后会返回你11分 (一定要评分,光评论是不返分的)

    c# 多线程任务中结束全部线程

    c# 多线程任务中结束全部线程

    c#多线程抓取网页内容

    多线程在C#中并不难实现。它有一个命名空间:System.Threading,提供了多线程的支持。 要开启一个新线程,需要以下的初始化: ThreadStart startDownload = new ThreadStart( DownLoad ); //线程起始设置:即每个...

    WinForm C#多线程等待窗体

    由于用到了非托管资源,最简单的方式是把托管资源(WaitForm)放在工作线程,线程结束,窗体会自动销毁,不用自己写清理代码。 ShowDialog自动阻塞当前线程,这使它成为最优的解决方式。

    VB.Net-C#多线程Thread-代理委托delegate编程

    最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....

    C# winform动态创建和关闭多线程源码 可运行

    C# winform 动态创建和 关闭多线程,基于VS2010的完整解决方案。 可运行

    C#用了多线程界面卡死

    C#用了多线程界面卡死

    C#解决SQlite并发异常问题的方法(使用读写锁)

    使用C#访问sqlite时,常会遇到多线程并发导致SQLITE数据库损坏的问题。 SQLite是文件级别的数据库,其锁也是文件级别的:多个线程可以同时读,但是同时只能有一个线程写。Android提供了SqliteOpenHelper类,加入Java...

    c# Winform 弹出式等待窗口,多线程

    网上有好多使用多线程弹出式等待窗口作为程序中较长时间后台运行提示的,但是做的都不完善,尤其是用 waitThread.Abort() 杀死线程时容易产生异常,进而出错。本程序是比较完善的改进,利用多线程弹出等待窗口,并...

    VS2019 C++ 彻底关闭所有线程

    本工程是VS2019的C++语言的,我在网上找了很多关于关闭线程的例子,都不能彻底关闭开着的线程,这个例子是个C++函数,我放到了MFC界面上,这样看着更直观,用的时候,直接把关闭线程的函数提取出来拿来用。...

    c#多线程通信

    1:建立一个Socket对像; 2:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求; 3:如果连接成功,就用socket对像的Send()方法向服务器发送...5:通信结束后一定记得关闭socket;

    c#的HTTP多线程下载源码

    这是我按照一个教程做的,在vs2005下用C#写的,现在可以实现小文件,少线程的下载,当下载大文件,或使用线程的数量大时程序会自己关闭,不知道什么原因,请大家一起来学习完善这个程序,我的邮箱zbl131@126....

    C#网络五子棋 多线程

    开发环境:VS2005 实现方法,灵活运用PictureBox,基于网络通信UDP 附加聊天功能,窗体运用多线程监听 使用时关闭Windows防火墙效果更加

    C#多线程编程详解

    C#提供了丰富的多线程操作,为编程带来了极大的便利。 一、使用线程的理由 1、可以使用线程将代码同其他代码隔离,提高应用程序的可靠性。 2、可以使用线程来简化编码。 3、可以使用线程来实现并发执行。 二、基本...

    .net c#线程超时解决方案

    .net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...

    多线程完美停止例程

    多线程完美停止例程

    c# winform 关闭窗体时同时结束线程实现思路

    th.IsBackground = true解决线程问题,意思就是把线程设置为后台线程,感兴趣的朋友可以多了解下,如何有什么妙招还请多多指导哈

    .net C#线程超时

    .net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...

    中奖程序,form编程,多线程操作

    常见的一个中奖程序,用form编写,包括多线程的常见操作,容易理解,挂起线程,恢复线程,关闭线程。

    C#停止线程的方法(示例)

    C#停止正在运行的线程,一个完整的C#源码示例,线程在平时也是经常用到的高级技巧,现在计算机都是多任务操作了,掌握好线程可提高你的软件效率,本示例演示如何关闭一个正在执行的进程,源码在VS2010中可以正常编译...

Global site tag (gtag.js) - Google Analytics