VS 2010 开发WinForm(c#)
我写了一个小软件(WinSteel),打开软件后,会出现3个进程,如下图(WinSteel.exe):
当我关闭软件后,进程中的WinSteel.exe还在,不会消失!
请问:是不是需要些代码来释放这些进程??代码怎么写??
------解决思路----------------------
正常情况. Application.Exit()后进程肯定就退出了
如果没有,就要查是不是
有工作线程未结束,有循环未正常退出等等
------解决思路----------------------
一般这种问题就是2个原因造成的
1.有隐藏的窗体没关闭
2.有运行的线程没退出
问题1的解决办法,主窗体Close的时候,执行Application.Exit()
问题2的解决办法,线程设置为BackGround=true后台线程
终极解决办法
Process.GetCurrentProcess.Kill();//杀死当前线程
------解决思路----------------------
Process.GetCurrentProcess.Kill();//杀死当前进程
如果你用这个办法,那么前面两个解决办法都可以忽略了
不管什么状况,杀死进程它总不会再有了
------解决思路----------------------
代码写的有问题 而不是说exe需要"释放"...
因为你的程序中使用了多线程..并且就算在程序退出的时候 也没有完全关闭或者销毁.
所以才会出现这样的问题...
解决问题的根本原因就是不要用线程..因为不好管理..用用线程池啦或者异步啦之类的东西...
当然你也可以在main.cs的close里面写application.exit()
------解决思路----------------------
启动thread之前设置
yourthread .IsBackGround = true;
------解决思路----------------------
Thread查找整个解决方案,肯定创建了线程但是一直没有退出。
找到创建的线程然后和楼上说的一样
------解决思路----------------------
如果没有前台线程的话,就按你修改的方法,用application.exit()
------解决思路----------------------
一般这种问题就是2个原因造成的
1.有隐藏的窗体没关闭
2.有运行的线程没退出
问题1的解决办法,主窗体Close的时候,执行Application.Exit()
问题2的解决办法,线程设置为BackGround=true后台线程
终极解决办法
Process.GetCurrentProcess.Kill();//杀死当前线程
Application.Exit()会释放当前进程的所有前台线程和占用的资源。
线程的属性IsBackGround=true用于设置是否是后台线程。
MDI子窗体,应该设置parent属性,指明是附属于哪个父窗体。
(后台线程的意思是:程序退出后继续运行,这就是后台运行的意思。
相对的前台线程,即窗体或交互界面释放前会结束前台线程。
还有一个守护线程,守护线程可以理解为就是一直在后台运行的线程,默默守护人在塔在。。)
------解决思路----------------------
楼主你还是得检查检查自己的程序。正常情况,WinForm程序点击关闭按钮后,进程不会继续驻留那么久。
登录窗口,如果登录成功,那我用的代码是 this.Hide() ,会不会是这个原因??
如果用this.Close() ,那么主窗口不会显示出来,程序直接就关闭了,所以我用了this.Hide()
是的.
我前面已经说过了,只有2种可能
1.有窗口没关闭(被你hide了)
2.有线程没退出
既然你没用线程,那就是窗口的问题了
窗口的问题,加上Application.Exit()就会自动帮你关掉所有的窗体