首页 新闻 会员 周边

C#的程序进程关闭的问题

0
悬赏园豆:5 [已解决问题] 解决于 2013-10-17 08:41

用C#开发的winform系统关闭后,发现进程还在。如何在退出系统后,进程也关掉呢?

pengjw的主页 pengjw | 初学一级 | 园豆:3
提问于:2013-08-27 11:25
< >
分享
最佳答案
0

你应该是还有未关闭的线程吧。

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-08-27 11:41

那我怎样在系统关闭的时候将相关线程给关掉呢?

pengjw | 园豆:3 (初学一级) | 2013-08-27 11:42

@pengjw: Thread.IsBackgroundThread=true

Launcher | 园豆:45045 (高人七级) | 2013-08-27 13:02

@Launcher: 这句代码我加到哪呢?主窗体关闭事件吗?

pengjw | 园豆:3 (初学一级) | 2013-08-27 13:30

@pengjw: 你创建的线程,比如:

Thread th = new Thread;

th.IsBackgroundThread = true;

Launcher | 园豆:45045 (高人七级) | 2013-08-27 13:31

@Launcher: 那我就没创建过线程。我的代码里我就没用Thread th = new Thread;这个定义

pengjw | 园豆:3 (初学一级) | 2013-08-27 13:49

@pengjw: 那你能否仔细检查下你的代码,我怀疑你的代码有BUG。

Launcher | 园豆:45045 (高人七级) | 2013-08-27 14:05

@Launcher: 我的代码运行各种功能都正常,没有报错。我打包后。可以在别的机子上安装,功能都正常,但是发现在系统关闭的时候,系统进程并没有结束

pengjw | 园豆:3 (初学一级) | 2013-08-27 14:53

@pengjw: 我比较奇怪的是,你的程序关闭后,进程还在,这也叫“正常”吗?你新建一个Winform 程序,什么都不添加,你看看它关闭后还在进程吗?所以,这不是Winform 的 BUG,是你程序中的 BUG,你添加的代码造成了此问题。

你应该检查你的代码,找到阻止进程退出的问题代码并修改它,又或者你并没有正确调用退出进程的API,你只是摧毁了窗体或隐藏了窗体,总之这都是你的代码的潜在问题。

Launcher | 园豆:45045 (高人七级) | 2013-08-27 14:59

@Launcher: 嗯,谢谢你的耐心解答,那我再找找代码里的原因。

pengjw | 园豆:3 (初学一级) | 2013-08-27 15:13

@pengjw: 你可以通过附加到进程的方式将调试器连接到未退出的进程,然后单击“暂停”,观察停止的位置。

Launcher | 园豆:45045 (高人七级) | 2013-08-27 15:16
其他回答(7)
0
Rookier | 园豆:652 (小虾三级) | 2013-08-27 11:58
0

Environment.Exit(0);  主窗体关闭的时候调用这个方法

贺臣 | 园豆:307 (菜鸟二级) | 2013-08-27 12:17

你好,我加了这句代码,主窗体没法关闭了,一直在运行。除非我在VS2012里结束运行,才会关闭

支持(0) 反对(0) pengjw | 园豆:3 (初学一级) | 2013-08-27 13:44
0

你用了多线程吧?直接将非主要的线程,设置为后台线程即可。Thread.IsBackgroundThread=true;,大概是这样的。后台线程会在主线程关闭后自动关闭~

幻天芒 | 园豆:37175 (高人七级) | 2013-08-27 12:59

我应该没用多线程的。我的小系统很简单,就是主窗体,然后另外几个窗体。

支持(0) 反对(0) pengjw | 园豆:3 (初学一级) | 2013-08-27 13:31

@pengjw: 如果没多线程,那你只需要保证主窗体(在Program中启动的那个)关闭了,即可~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-08-27 14:55
0

如果其它方法不好用,而你就是要关闭。

给你一个绝对可行的方法,调用 非托管的ExitProcess或TerminateProcess,这个方法只要给个进程ID,不管是当前进程,还是其它进程,都可以结束,就相当于你从任务管理器里点结束进程。

空明流光 | 园豆:106 (初学一级) | 2013-08-27 14:08
0

你关闭的时候是不是没关闭主窗体,主窗体只是隐藏掉了? 你说的关闭是应该把子窗体关闭了吧?而父窗体一直处于hide吧,这样的话进程肯定还在的

Fly Away | 园豆:207 (菜鸟二级) | 2013-08-27 17:19
0

楼主,你找到问题了么?是程序写的有错误还是线程没关啊?我也碰到一样的问题了,我也没写过Thread th = new Thread;这个定义

zhyue93 | 园豆:191 (初学一级) | 2016-04-01 16:42
0

“暂停”,观察停止的位置。

@pengjw: 你可以通过附加到进程的方式将调试器连接到未退出的进程,然后单击“暂停”,观察停止的位置。

XingQiWu | 园豆:207 (菜鸟二级) | 2017-05-24 14:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册