在 Visual Studio 中,窗体关闭后调试器未停止

9
Visual Studio调试在我关闭用C#编写的窗体时不会停止。我如何在关闭窗体时停止调试进程?我在窗体关闭事件中添加了Application.Exit()方法,但它没有起作用。
谢谢。

1
也许仍有一些后台处理正在运行?在关闭主窗体后,您可以暂停执行并检查“线程”窗口。 - Uwe Keim
1
当你关闭所有内容后,在Visual Studio的调试菜单中尝试使用“Break All”,看看你会在哪里停止。 - Anders Forsgren
是的,我意识到我的一些线程仍在运行。我该如何停止这些线程? - sanchop22
你尝试过使用Application.Current.Shutdown()吗? - coder
应用程序类中没有当前项。为什么?我正在使用 .net framework 4 客户端配置文件。 - sanchop22
也许你应该查看项目属性 => 调试 => 如果已选中,请取消选中“启用 Visual Studio 托管进程”。 另外:使用Shift+F5停止调试进程。 - jbl
4个回答

7

这里尝试一下


请问还需要翻译其他内容吗?
If (System.Windows.Forms.Application.MessageLoop)
{
  // Use this since we are a WinForms app
  System.Windows.Forms.Application.Exit()
}
Else
{
  // Use this since we are a console app
  System.Environment.Exit(1)
}

编辑:

如果有正在运行的“无限”线程,则执行以下操作

Thread myThread = new Thread(...);
myThread.IsBackground = true; //set your running thread to background
myThread.Start(...);

你可以从这里了解如何进行操作?


1
如果在 Application.Exit() 之后使用 this.Close(),会导致 StackOverflowException 异常。 - sanchop22
我认为你的应用程序存在无限循环,通常是由于对一个函数进行递归调用而该递归调用永远不会终止所导致的。 - coder
我添加了一些代码,请检查并告诉我它是否起作用。 - coder
当然可以。为什么你不能手动从菜单中选择“停止调试”选项呢?或者尝试重置你的 Visual Studio 设置,也许这样可以解决问题。 - coder
谢谢!将IsBackground设置为true在我的情况下起作用,当关闭窗体没有关闭应用程序和停止调试器时。 - Duncan Drennan
显示剩余2条评论

2
这将是四年来的一次迟到,然而我认为我应该为任何遇到这个问题的人(就像我刚刚遇到的那样)发布这篇文章。很抱歉,如果这些内容很基础,因为我对C#还比较新,所以这让我有点困惑。
我和OP一样,在我的FormClosing事件中,无论是Application.Exit()还是Environment.Exit(0)都无法结束调试器。
我找到的解决方法是查看我的FormClosing事件上方的引用计数,它显示“0个引用”。我刚刚从另一个论坛复制并粘贴了关闭事件,因此没有事件处理程序来处理我创建/复制的事件。
除了不要复制和粘贴代码之外,解决这个问题的一个简单方法是创建事件处理程序:
1. 首先转到“Form1.cs [Design]”选项卡 2. 导航到“属性”框 3. 单击“事件” 4. 找到“FormClosing”并双击
如果你遇到了相同的问题,现在应该能够看到至少有1个对事件的引用。现在当你关闭表单时,它也应该停止调试器。

1

我看到这个问题是因为在调试应用程序关闭时,VS没有停止。

一种查看IDE挂起的可能原因的方法是单击暂停并在“调试位置”工具栏上查看任何仍在运行的线程。对我来说,我注意到仍然存在一个未处理的RabbitMq上下文。所以这就是我需要的线索。

在我进行代码更改后,VS现在会在应用程序退出时停止调试会话。

我知道这不是您期望的解决方案,但找出应用程序为什么无法正确退出或仍保持后台进程处于活动状态是一个非常棘手的问题。在我看来,活动线程下拉菜单是最好的查看位置。


谢谢!这也是我的问题。关于线程,我以前从没用过那个窗口...只有在设置断点后才能看到。当你暂停时,它们可以通过DEBUG->Windows进行查看。 - MarkJoel60

0
另一种可能性是,你的进程出现了没有正确处理的异常。我曾经在自定义对话框中显示异常消息,但有一次忘记显示创建的窗口。因此,程序遇到异常,创建了窗口,但却没有显示任何迹象...所以即使我关闭了应用程序,进程仍然继续运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接