C# 退出子窗体时怎样关闭该子窗体内所创建的所有线程(循环创建100个)?线程可能还没执行完毕。

关闭子窗体,但不关闭主窗体。 而且该子窗体会需要再次打开,又会重新创建新的100个线程,
原本程序里已经设置thread.IsBackground = true;但是还是无效。

按二楼的方法 Process.GetProcessesByName("你的窗体的名字")[0].Kill();
出现超出数组索引错误提示 "Index was outside the bounds of the array"

在建立子线程后,时设置
thread.IsBackground = true;

thread.Start();

即可,IsBackground = true;
意思是子线程随创建子线程的线程结束而自动结束子线程。

另外在 关闭子窗体时,把FormClosed的事件传递给前面的父窗体,在父窗体中
定义子窗体FormClosed的处理函数中在写明
//子窗体销毁
子窗体.Dispose();
//清理内存,回收清理垃圾。
GC.Collect();

.NET自动回收垃圾是不定时的,
有时候你可能需要手动激活垃圾回收器
比如说,你某一时刻到很多资源,用完以后可能有些比较占内存的资源来没有被及时回收,就需要你手动的用这些
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-05
如果你的线程是循环形式的,那么给它的循环体的判断里面加一个全局变量flag,一开始设为true,当子窗体退出的时候改为false
第2个回答  2010-06-05
现象是不是你明明关闭了窗口 但是进程里没关闭。
这样的话就直接关闭进程就可以了。
using System.Diagnostics;

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Process.GetProcessesByName("你的窗体的名字")[0].Kill();
}

C# 退出子窗体时怎样关闭该子窗体内所创建的所有线程(循环创建100个...
在建立子线程后,时设置 thread.IsBackground = true;thread.Start();即可,IsBackground = true;意思是子线程随创建子线程的线程结束而自动结束子线程。另外在 关闭子窗体时,把FormClosed的事件传递给前面的父窗体,在父窗体中 定义子窗体FormClosed的处理函数中在写明 \/\/子窗体销毁 子窗体.Dispose(...

在C#中如何实现关闭所有子窗体?
1、首先我们打开子窗口的属性,点击“雷电图标(下图有框着)”找到 FormClosing(或者FormClosed)事件,双击。2、在GameUI_FormClosing事件里编辑代码。3、要是想在用户关闭子窗口程序时给个提示框,可以加参考以下代码:4、this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另...

C#关闭应用程序时如何关闭子线程(前台线程和后台线程)
回答:后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground ...

c#怎样在关闭窗体时结束整个进程
当进行多线程程序设计的时候,主窗体关闭,往往子线程还在继续运行,这就需要在关闭主窗体之前收回线程。设置一个主窗体的关闭事件,在关闭事件中,对子线程做回收处理。如果是在关闭子窗口的时候关闭整个进程,可以执行,Environment.Exit(0)结束进程。

C# 跳转到另一个Form窗体时如何关闭当前Form窗体?
方法一:关闭子窗体后 1、form2.Closed += (ss,ee)=> { this.Close(); };2、Application.OpenForms集合,找到要关闭的窗口,再Close:foreach (var item in Application.OpenForms),{ if (item is Form1) item.Close(); }。方法二:B new_form = new B();new_form.owner = this;this...

C# C\/S 弹出子窗体时父窗体不能操作
因为你是在线程池调用的ShowDialog,导致调用变成异步,所以与主窗口的主线程无关,因此主窗口不会被挂起。如果你直接在主窗口中调用ShowDialog才会正确将主窗口挂起。

(c#)如何关闭启动窗体而不关闭程序?
这样是不行的,Windows里面必须维护一个主线程不能结束,不然整个程序就结束运行了,所以你在form1里面显示form2然后又想把form1关掉是不可以的,结果会是整个程序都结束。所以正确方法是运行form2,在form2里面使用ShowDialog来显示form1,最后根据form1的DialogResult来判断form2还要不要继续显示。

C#中怎么在本窗体中关闭别的窗体
最安全的做法是委托,委托就不需要找对象。比如我想再B窗体里面关闭C窗体,他们之间都找不到对象,对象在A里面实例化的,怎么办?委托就要用上了。在B里面写委托主体申明,然后赋予事件主体。public delegete void close;public static event close close_c;B的按钮事件中加入:close_c();C的窗体启动...

...窗口登录后如何消掉登录窗口呀?使用this.hide()任务栏窗口还是...
你将你现在的两个Form倒置就行了。直接启动加载主窗体,然后在过程中ShowDialog 登录窗体,成功返回OK然后展示主窗体,取消返回Cancel就退出。例如这样,在主窗体的Load方法中按如下例子写就行:private void fmMDI_Load(object sender, EventArgs e){ fmLogin fm = new fmLogin();if (fm.ShowDialog()...

在C#窗体里创建了一个线程,线程里我定义了一个string变量,如何把该变量...
你可以在窗体内写一个方法,用来设置这个TextBox的值,然后在创建线程的时候,将这个方法传递给线程,这样在线程中就可以直接调用了 另外这个方法最好用Invoke()方法去实现

相似回答