C# 什么是线程退出代码?

C# 什么是线程退出代码?,c#,multithreading,debugging,exit-code,C#,Multithreading,Debugging,Exit Code,调试时,输出窗口中的线程退出代码到底是什么?它给了我什么信息?它是有用的还是仅仅是一种不应该困扰我的内在的东西 线程0x552c已退出,代码为259(0x103)。 线程0x4440已退出,代码为0(0x0)。 是否有一些可能的退出代码及其重要性的列表?关于这个主题实际上似乎没有太多的解释,但退出代码应该用来指示线程是如何退出的,0倾向于表示它安全退出,而其他任何东西倾向于表示它没有按预期退出。但是,这个退出代码可以由您自己在代码中设置,以完全忽略这一点 我能找到的对更多信息有用的最接近的链接

调试时,输出窗口中的线程退出代码到底是什么?它给了我什么信息?它是有用的还是仅仅是一种不应该困扰我的内在的东西

线程0x552c已退出,代码为259(0x103)。
线程0x4440已退出,代码为0(0x0)。

是否有一些可能的退出代码及其重要性的列表?

关于这个主题实际上似乎没有太多的解释,但退出代码应该用来指示线程是如何退出的,
0
倾向于表示它安全退出,而其他任何东西倾向于表示它没有按预期退出。但是,这个退出代码可以由您自己在代码中设置,以完全忽略这一点

我能找到的对更多信息有用的最接近的链接是

以上连结引述:

无论退出的方法是什么,从进程或线程返回的整数必须是0-255(8位)之间的值。零值表示成功,而非零值表示失败。尽管您可以尝试将任何整数值作为退出代码返回,但作为退出代码的一部分,进程或线程只返回整数的最低字节。操作系统使用高阶字节来传递有关进程的特殊信息。退出代码在批处理/shell程序中非常有用,这些程序根据一个程序的成功或失败有条件地执行其他程序


从文档中获取

重要信息GetExitCodeThread函数仅在线程终止后返回应用程序定义的有效错误代码。因此,应用程序不应使用STILL_ACTIVE(259)作为错误代码如果线程返回“仍然处于活动状态”(259)作为错误代码,则测试此值的应用程序可能会将其解释为线程仍在运行,并在线程终止后继续测试线程的完成情况,这可能会将应用程序放入无限循环



我对这一切的理解是,如果您在自己的应用程序中为自己的应用程序使用线程,那么退出代码并不重要。例外情况可能是,如果同时运行两个相互依赖的线程。如果需要外部源读取此错误代码,则可以将其设置为让其他应用程序知道线程的状态。

如Sayse所述,退出代码
259(0x103)
具有特殊意义,在这种情况下,正在调试的进程仍在运行


我在调试web服务时经常看到这一点,因为线程在执行每个web服务调用后继续运行(因为它仍在侦听进一步的调用)。

我的解决方案中有多个项目。我的意思是调试项目1,但是,项目2被设置为默认的启动项目。我修复了这个问题,右键单击项目并选择“设置为启动项目”,然后运行调试就可以了

有没有办法从输出窗口中删除它?@ArneEvertsson-如果你进入工具|选项。。。在“调试\输出窗口”区域下,有一个“线程退出消息”(开|关)设置。这可能意味着您正在同步应用程序主线程中使用异步方法,而不是等待它们完成。处理此问题的最简单方法是对由另一个方法启动并返回的任务调用Wait(),如本示例所示:
RunAsync().Wait()@BronDavies线程池线程即使在调用Wait()后也会退出,错误代码为259。下面是我的代码:
static void Main(string[]args){var t=new Task(()=>SomeOp(2));t.Start();t.Wait();}
问题是,任务是由线程池线程执行的,根据线程池的试探法,即使任务完成,它也可能不会终止线程。该线程只返回等待分配下一个任务的线程池。这就是为什么退出代码仍然有效(259)在这里听起来如此直观。链接中的文章是错误的。线程退出代码(或者进程退出代码)不需要只有一个字节。更多信息。。通常,线程池拥有的任何线程都将以259退出。看:我想知道这意味着什么,你的答案正是我在运行C#console应用程序时看到的。谢谢我不认为输出窗口中的调试消息是问题。我只是好奇它们是什么,而不是如何摆脱它们。