你应该是还有未关闭的线程吧。
那我怎样在系统关闭的时候将相关线程给关掉呢?
@pengjw: Thread.IsBackgroundThread=true
@Launcher: 这句代码我加到哪呢?主窗体关闭事件吗?
@pengjw: 你创建的线程,比如:
Thread th = new Thread;
th.IsBackgroundThread = true;
@Launcher: 那我就没创建过线程。我的代码里我就没用Thread th = new Thread;这个定义
@pengjw: 那你能否仔细检查下你的代码,我怀疑你的代码有BUG。
@Launcher: 我的代码运行各种功能都正常,没有报错。我打包后。可以在别的机子上安装,功能都正常,但是发现在系统关闭的时候,系统进程并没有结束
@pengjw: 我比较奇怪的是,你的程序关闭后,进程还在,这也叫“正常”吗?你新建一个Winform 程序,什么都不添加,你看看它关闭后还在进程吗?所以,这不是Winform 的 BUG,是你程序中的 BUG,你添加的代码造成了此问题。
你应该检查你的代码,找到阻止进程退出的问题代码并修改它,又或者你并没有正确调用退出进程的API,你只是摧毁了窗体或隐藏了窗体,总之这都是你的代码的潜在问题。
@Launcher: 嗯,谢谢你的耐心解答,那我再找找代码里的原因。
@pengjw: 你可以通过附加到进程的方式将调试器连接到未退出的进程,然后单击“暂停”,观察停止的位置。
Environment.Exit(0); 主窗体关闭的时候调用这个方法
你好,我加了这句代码,主窗体没法关闭了,一直在运行。除非我在VS2012里结束运行,才会关闭
你用了多线程吧?直接将非主要的线程,设置为后台线程即可。Thread.IsBackgroundThread=true;,大概是这样的。后台线程会在主线程关闭后自动关闭~
我应该没用多线程的。我的小系统很简单,就是主窗体,然后另外几个窗体。
@pengjw: 如果没多线程,那你只需要保证主窗体(在Program中启动的那个)关闭了,即可~
如果其它方法不好用,而你就是要关闭。
给你一个绝对可行的方法,调用 非托管的ExitProcess或TerminateProcess,这个方法只要给个进程ID,不管是当前进程,还是其它进程,都可以结束,就相当于你从任务管理器里点结束进程。
你关闭的时候是不是没关闭主窗体,主窗体只是隐藏掉了? 你说的关闭是应该把子窗体关闭了吧?而父窗体一直处于hide吧,这样的话进程肯定还在的
楼主,你找到问题了么?是程序写的有错误还是线程没关啊?我也碰到一样的问题了,我也没写过Thread th = new Thread;这个定义
“暂停”,观察停止的位置。
@pengjw: 你可以通过附加到进程的方式将调试器连接到未退出的进程,然后单击“暂停”,观察停止的位置。