C#程序关闭时怎么关闭子线程

一、在实际编码中会遇到这种问题:

  在客户关闭程序时,主线程直接关闭,不考虑子线程。

  但是任务管理器中,主程序进程还在运行(在等子线程结束,而子线程做成了while(1)等情况)

二、在主线程关闭处理时,首先关闭子线程。

  类似代码如下:

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
            if (flowThread != null && flowThread.isAlive)
                    flowThread.Abort();

            this.Dispose();
}

但是会遇到主程序关不掉,类似于死机的状态

三、在程序启动时强制停止同名进程

Process[] processes = System.Diagnostics.Process.GetProcesses(); //获得所有进程
foreach (Process p in processes)
{
    if (p.ProcessName == "WaterMonitorIS_Weiding" && p.StartTime < DateTime.Now.AddMinutes(-2))
    {
        p.Kill();
    }
}  

四、把线程赋值为null

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
            flowThread = null;
            this.Dispose();
}

五、逼格最高的版本,使用Thread对象的一个IsBackground属性,设置为true即可,在主线程关闭时,子线程随之关闭,速度很快。

flowThread.IsBackground = true;

参考博文:http://blog.csdn.net/effectiveagui/article/details/7841792

时间: 2024-11-03 22:07:07

C#程序关闭时怎么关闭子线程的相关文章

转 点击关闭时最小化到任务栏

来源:http://www.2cto.com/kf/201401/274489.html 现在很多软件如360杀毒软件.酷狗音乐都拥有最小化至任务栏并在系统托盘区留下图标,我的项目同样需要该功能.所以本文主要叙述如何使用C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,右键能关联控件显示3个常用功能.主要涉及到的控件是NotifyIcon和ContextMenuStrip,此类文章较多,希望作者以自己的独特视角给予大家帮助. 一.界面操作 1.创建"Windows窗体应用程序&

C#子线程更新UI控件的方法总结

http://blog.csdn.net/jqncc/article/details/16342121 在winform C/S程序中经常会在子线程中更新控件的情况,桌面程序UI线程是主线程,当试图从子线程直接修改控件属性时会出现“从不是创建控件的线程访问它”的异常提示. 跨线程更新UI控件的常用方法有两种: 1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更新 1.使用控件自身的invoke/BeginIn

是什么在.NET程序关闭时阻碍进程的退出?

在平时使用软件或是.NET程序开发的过程中,我们有时会遇到程序关闭后但进程却没有退出的情况,这往往预示着代码中有问题存在,不能正确的在程序退出时停止代码执行和销毁资源.这个现象有时并不容易被察觉,但在另一些情况下却会产生影响软件功能的Bug.本文列举可能影响.NET程序进程退出的因素,并用几个小例子说明这些因素如何导致Form Application和Windows Service的Bug. 一.进程不能退出对于某些Windows Form程序的影响 在传统C/S结构的系统中,客户端会通过Soc

js父窗口关闭时,子窗口随之关闭

最近,遇到一个权限管理的系统.由于权限管理的系统和本来的系统风格不一致,所有新打开一个窗口.问题就来了,admin注销之后,权限管理的窗口没有关闭.其他普通用户登录以后,仍然可以操作权限管理的窗口. 问题简化:admin注销的时候,或者main.html关闭的时候,打开的所有新窗口一起关闭.问题就解决了 直接看代码吧: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w

C# 串口关闭时主界面卡死原因分析

原文:C# 串口关闭时主界面卡死原因分析 问题描述 前几天用SerialPort类写一个串口的测试程序,关闭串口的时候会让界面卡死. 参考博客windows程序界面卡死的原因,得出界面卡死原因:主线程和其他的线程由于资源或者锁争夺,出现了死锁. 参考知乎文章WinForm界面假死,如何判断其卡在代码中的哪一步?,通过点击调试暂停,查看ui线程函数栈,直接定位阻塞代码的行数,确定问题出现在SerialPort类的Close()方法. 参考文章C# 串口操作系列(2) -- 入门篇,为什么我的串口程

WPF 程序中启动和关闭外部.exe程序

当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; u

如何监听 App 被关闭时 - iOS

在 Appdelegate 里 applicationWillTerminate 是处理应用程序将终止的时候 按道理,我们在这个地方去写我们 App 被关闭时的操作就行. 但是,我发现 App 关闭的时候,并不会走到这里来. 然后我看了下系统的注释:当应用程序即将终止时调用.如果适当的保存数据.可看 appropriate. See also applicationDidEnterBackground:. 这个方法 好像和我遇到的问题没啥关系! 我只想在 App 关闭的时候调用 // 应用程序将

Mac中(parallels desktop)pd虚拟机关闭时如何访问硬盘?

对于使用mac电脑还不是很熟练的小伙伴来讲,安装虚拟机是必备!parallels desktop就是一款非常不错的虚拟机工具,那么Mac中pd虚拟机关闭时如何访问硬盘?即使虚拟机是关闭的,我们依然可以访问我们硬盘的内容,如果你也不知道具体如何操作的话,就一起来看看吧! <ignore_js_op> Mac中pd虚拟机关闭时访问硬盘步骤:第一步:在mac电脑中启动Parallels Desktop应用 第二步:右击Dock中的Parallels Desktop图标,然后点击"控制中心&

当页面关闭时向后台发送请求

今天做项目时遇上一个需求,当浏览器或页面关闭时将数据存储到数据库内.实现思想是采用js监测onunload然后发送请求.结果失败,刷新可以发送但是关闭并不能,最终整了一整天并没有解决,最后找到了解决办法. 先贴个能实现功能的方法: 1 function saveStatus(){ 2 /*结束时保存设备状态*/ 3 window.onbeforeunload=function(){//必须使用beforeunload 4 var url ="device_saveDeviceStatus&quo