BaseForm 为主窗体,当它启动时内部的几个线程和几个times组件也同时启动,但点击“退出”按钮后虽然窗体关闭了,但在windows进程列表中还有这个进程,
请问这是怎么回事阿?我在“退出”前因为里面线程太多了所以没有关闭这些线程,是这个原因码?如何才能彻底的关闭这个进程?
下面启动和退出的代码:
启动的代码: [STAThread]
private static void Main()
{
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new BaseForm());
//System.Diagnostics.Process.GetCurrentProcess().Kill(); //用这俩句可以关闭进程,但如果有其他的方法的话尽量不用这个方法
//System.Diagnostics.Process.GetCurrentProcess().WaitForExit();
}
关闭的代码:
private void radEXIT_CheckedChanged(object sender, EventArgs e)
{
//Application.Exit() //不起作用,只能关闭当前窗体,但在但在windows进程列表中还有这个进程
this.Dispose(); //不起作用,只能关闭当前窗体,但在但在windows进程列表中还有这个进程
}
请问这是怎么回事阿?我在“退出”前因为里面线程太多了所以没有关闭这些线程,是这个原因码?如何才能彻底的关闭这个进程?
下面启动和退出的代码:
启动的代码: [STAThread]
private static void Main()
{
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new BaseForm());
//System.Diagnostics.Process.GetCurrentProcess().Kill(); //用这俩句可以关闭进程,但如果有其他的方法的话尽量不用这个方法
//System.Diagnostics.Process.GetCurrentProcess().WaitForExit();
}
关闭的代码:
private void radEXIT_CheckedChanged(object sender, EventArgs e)
{
//Application.Exit() //不起作用,只能关闭当前窗体,但在但在windows进程列表中还有这个进程
this.Dispose(); //不起作用,只能关闭当前窗体,但在但在windows进程列表中还有这个进程
}
--------------
当它启动时内部的几个线程和几个times组件也同时启动
----------------------------------------
将这些线程的IsBackground 全设置为true
System.Threading.Thread thread;
System.Threading.ManualResetEvent obj = new System.Threading.ManualResetEvent(false);
private void Form1_Load(object sender, EventArgs e)
{
thread = new System.Threading.Thread(new System.Threading.ThreadStart(test));
thread.Start();
} public void test()
{
obj.Reset();
while (true) { Console.WriteLine(Guid.NewGuid());
if (obj.WaitOne(10, false) == true)
break; }
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
obj.Set();
}
----------------------------
我用 STAThread 多线程程序没法生成,
改成 MTAThread 才成功-_-'',
原来STAThread也行啊,学习。