线程已退出,代码为0(0x0),没有未处理的异常


93

在调试我的C#应用​​程序时,我注意到以下句子大量出现:

线程-已退出,代码为0(0x0)。

该应用程序将继续工作,不会捕获/处理异常。

该应用程序在Windows 7 64位上运行,并使用x86平台进行了调试。


1
您确定这些是您的线程吗?如果是这样,您不期望他们完成?
SLaks 2012年

Answers:


137

这只是调试消息。您可以通过右键单击输出窗口并取消选中来关闭它Thread Exit Messages

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

除了从应用程序中编程外,“ 输出”窗口还可以显示以下信息:

  • 调试器已加载或卸载的模块。

  • 引发的异常。

  • 退出的进程。

  • 退出的线程。


10

嗯,一个应用程序可能有很多并行运行的线程。有些是由您(编码员)运行的,有些是由框架类运行的(特别是如果您在GUI环境中)。

线程完成其任务后,将退出并停止存在。也就是说,没有什么可担心的,您不应该在意。


我讨论过的线程不是我的(或不属于我的应用程序)。但是,我的应用程序需要连接到Linux AIX服务器,该服务器会返回大量已失效的进程。我对这个服务器的工作原理(以及它的任务)不清楚,但是我想上述线程可能会影响服务器的行为。
Gionata 2012年

好吧,也许线程实际上会影响您的应用程序,但是您收到的消息告诉您它们已成功终止。因此,您可以尝试查找为什么要运行它们(调试菜单=> Windows =>线程),但这很正常,它们会结束。
Kek 2012年

它们正常结束,但是Linux服务器失效的进程可能是.net框架线程的副作用。也许应用程序在多线程实现中存在各种编程错误。可能吗?
Gionata 2012年

我不知道。这个linuw服务器正在运行.NET?使用单声道?你到底有什么问题?已经解散的进程?
Kek 2012年

是的,dufunct进程使Linux Server崩溃。
Gionata 2012年

7

为了完成BlueM可接受的答案,您可以在此处将其停用:

工具>选项>调试>常规输出设置>线程退出消息:关


4
BlueM接受的答案实际上有一个更简单的解决方案:“您可以通过右键单击输出窗口并取消选中线程结束消息来将其关闭”
SimonMᶜKenzie17年

5

如果您的应用程序直接或间接使用线程(例如,像在第三方库中那样在后台运行),则在完成线程后终止线程是绝对常见的……这基本上就是您所描述的……调试器显示此消息...您可以将调试器配置为不显示此消息...

如果上述方法无济于事,请提供更多详细信息,因为我不确定您所面对的到底是什么问题...


1

框架创建线程来支持您创建的每个窗口,例如,当您创建Form并对其进行.Show()时。当窗口关闭时,线程终止(即,它们退出)。

这是正常现象。但是,如果应用程序正在创建线程,并且有许多与这些线程相对应的线程退出消息(可以通过在应用程序中为其指定不同的名称来辨别线程的名称),则可能表明存在问题由于程序逻辑错误,应用程序在不应该创建线程的情况下创建线程。

让原始海报让我们知道他/她发现的有关服务器崩溃问题的信息将是一个有趣的后续活动。我感觉这与它没有任何关系……但是很难从发布的信息中看出来。


1

执行Linq查询会生成额外的线程。当我尝试在立即窗口中执行使用Linq查询集合的代码时,由于调试器没有足够的可用线程,它经常拒绝运行。

正如其他人所说,线程在完成时退出是完全正常的。


0

我也遇到了这个问题,解决方案是:

  1. 打开解决方案探索
  2. 双击Program.cs文件

我再次添加了此代码,并且我的程序正确运行:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.