2 qq812858143 qq812858143 于 2016.03.25 10:17 提问

winform子窗体中的多线程怎么完全释放

我在主窗体中打开一个子窗口,然后这个子窗口中有三个多线程,当窗口关闭的时候,如何完全释放掉这三个多线程.要不然每次打开就会多三个线程,系统会越来越卡.
补充:我的三个线程里都是while(true){}无限循环

4个回答

songhtao
songhtao   Rxr 2016.03.25 10:29
已采纳

可以在窗口退出事件如OnFormClosing释放线程

bdmh
bdmh   Ds   Rxr 2016.03.25 10:26

线程执行完毕就会自行释放,你一定要让线程有退出的条件,比如置一个变量,在内部循环中判断,从而退出while等循环操作

bdmh
bdmh   Ds   Rxr 2016.03.25 10:27

当然,有强制杀死进程的api方法,但是不提倡使用

qq812858143
qq812858143 我担心的是,每次打开窗口都开启新的三个线程,而每次关闭只能Abort停止线程,会造成开启很多个线程
2 年多之前 回复
qq978450288
qq978450288   2016.03.25 10:38

利用线程池 ThreadPool 系统会自动帮你优化。 何时释放交给 ThreadPool就行

qq978450288
qq978450288 就像bdmh 所说 线程工作结束 就会自动释放。 问题是 频繁的创建与释放线程 也是消耗资源的。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
winForm 子窗体间相互切换时,关闭当前子窗体并释放资源
首先在父窗体中判断该窗体是否已经存在         public static frmBookSelect fbs;         private void tsbBookSelect_Click(object sender, EventArgs e)         {             if (fbs == null)          //如果不存在就实例化该窗体并显示
winform程序两个窗体间同步数据(二): 子窗体和线程实现
一 : 显示效果 二 代码 1  入口程序 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication1 { static class Program { /
C#中关闭子窗口而不释放子窗口对象的方法
在线扫描相机的调试过程中,需要开辟调试界面来进行位置的配置。调试结束后,一种常用的方式是将调试参数保存并在下次启动时加载。另一种简单方式是直接使用该参数运行程序。因此,在后一种情况下,需要实现的功能是:即使关闭调试窗口,其窗口对象也不释放。除非其主窗口关闭,才销毁其调试窗口的对象。
C#主窗体控件打开一个子窗体,子窗体关闭后,再重新打开子窗体出现:无法访问已经释放的对象
主窗体一个按键按下显示一个子窗体; 在子窗体的FormClosing事件中添加: 这样就不会出现同时显示两个子窗体,并且关闭子窗体后,再次打开不会出现 ”无法访问已经释放的对象的提示“ ; 因为我们关闭操作只把窗体可视化隐藏了,而关闭操作也被我们取消了;             this.Visible = false;             e.Can
winform程序两个窗体间同步数据(三):建立父窗口与子窗口的父子关系(不使用线程)
一 问题: 1 可不可以不使用线程?  可以。需要建立父窗口和子窗口之间的父子关系。 2 如何建立父子关系? 在子窗体中增加一个类型为父窗口的属性(即ChildFrm类中设置 public ParentFrm parentFrm{get;set;}属性)。 二 显示效果 三 代码 1 入口程序 using System; using System
Winform的多线程问题
<br />在System.Threading命名空间下,包含了用于创建和控制线程的Thread类。对线程的常用操作有:启动线程、终止线程、合并线程和让线程休眠等。    1. 启动线程<br />    在使用线程前,首先要创建一个线程。其一般形式为:<br />Thread t=new Thread(enterPoint);<br />    其中enterPoint为线程的入口,即线程开始执行的方法。在托管代码中,通过委托处理线程执行的代码。例如:<br />Thread t=new Thread(n
C#之WinForm子窗体最大化显示异常问题及解决方案
WinForm中,MDI子窗体最大化后,会使子窗体的图标与主窗体的菜单栏合并,影响显示效果,处理方法如下: 在主窗体的主菜单(假设叫做MainMenu)的ItemAdded事件中加入如下代码即可 private void MainMenu_ItemAdded(object sender, ToolStripItemEventArgs e) { if (e.Item.Text.Len
C# winform编程 -- 如和让子窗体弹出父窗体不可选中状态
新建两个窗体Form1、Form2,Form1添加button,双击button添加单击事件,利用ShowDialog()方法实现。 Form2 f2 = new Form2(); f2.ShowDialog();
Winform 多MDI窗体关闭时,无法访问已释放的对象对象名:“Icon”
无法访问已释放的对象对象名:“Icon” 在WINFORM开发中,对当打开多个MDI窗体,并且在最大化状态下关闭窗体时,常常出现以下异常:System.ObjectDisposedException:无法访问已释放的对象。 对象名:“Icon”。    在 System.Drawing.Icon.get_Handle()    在 System.Drawing.Icon.get_Size(
WinForm子窗体嵌入到父窗体的Panel里
现有一个父窗体name是Parent,子窗体name是Son,要让Son嵌入在Parent的Panel内,则父窗体的初始加载代码如下: private void Parent_Load(object sender, System.EventArgs e)   {    this.IsMdiContainer=true;//设置父窗体是容器    Son mySon=new Son();//