为什么.exe拒绝停止?

时间:2009-01-12 22:18:03

标签: c# multithreading process terminate

我“继承”了我必须调试的遗留C#/ C ++程序。当前的问题是.exe关闭程序后不会停止,即它仍然显示在任务管理器中。

这是一个问题,因为它不会让我重新启动程序,因为只能运行一个实例。经常杀死这个过程不起作用;我被迫重启。

我的印象是,当主程序停止时,所有子线程也应该停止,但我可能错了。

问:什么会导致.exe无法停止?

6 个答案:

答案 0 :(得分:12)

子线程不会自动停止,除非它们被专门设置为后台线程(即使用thread.IsBackground = true)。

编辑:当表单关闭时,主线程也可能没有终止(即,其他代码设置为在关闭后运行,但未完成)。

答案 1 :(得分:6)

我发现使用调试器附加到正在运行的进程并按下暂停按钮很有用。之后,我将检查Threads窗口,看看堆栈跟踪为每个执行线程做了什么。默认情况下隐藏线程窗口。以下是有关如何显示和使用它的更多信息:

http://msdn.microsoft.com/en-us/library/w15yf86f.aspx

答案 2 :(得分:2)

我的猜测是所有线程都没有停止。通常你可以结束任务程序,但它会停止。也许一个线程已经挂起了一个更难以发布的系统资源。

如果您可以获得调试版本,请运行该程序,在程序“退出”后,点击调试窗口中的暂停按钮。此时,您可以查看线程并找出哪一个挂起。为了提供帮助,您应该在创建线程时命名它们(它是.Start函数中的额外参数)

答案 3 :(得分:2)

您可能需要查看process explorer。它可以更容易地关闭程序,它可以查看程序的线程,并可能指向正确的方向,使程序运行。

答案 4 :(得分:0)

在最基本的层面上,某处存在无限循环。

答案 5 :(得分:0)

启动是否正在关闭以退出应用程序?如果不是,则需要将Application.Exit()或Environment.Exit()放在最后关闭的表单的form.closed事件中。