C# 线程的ThreadStart例程返回时线程是否自动停止?

C# 线程的ThreadStart例程返回时线程是否自动停止?,c#,.net,multithreading,C#,.net,Multithreading,我创建了一个新线程,并为其分配了一个函数,以便使用ThreadStart执行。 这里有一个例子: this.threadAppPtE = new Thread(new ThreadStart(synchronizeAppPte)); 当我分配的函数结束时,线程是自动停止还是必须手动结束?是的,只要它没有被阻止并完成工作,线程将自动终止。显然,您首先需要调用threadAppPtE.Start()来启动它 在线程尚未完成的地方重新加入线程更为复杂。有一篇名为的好文章,可能有助于更好地解释这个过程

我创建了一个新线程,并为其分配了一个函数,以便使用ThreadStart执行。 这里有一个例子:

this.threadAppPtE = new Thread(new ThreadStart(synchronizeAppPte));

当我分配的函数结束时,线程是自动停止还是必须手动结束?

是的,只要它没有被阻止并完成工作,线程将自动终止。显然,您首先需要调用
threadAppPtE.Start()
来启动它

在线程尚未完成的地方重新加入线程更为复杂。有一篇名为的好文章,可能有助于更好地解释这个过程。

线程将一直执行,直到发生以下事件之一:

  • 线程调用ExitThread函数
  • 进程的任何线程都调用ExitProcess函数
  • 线程函数返回。
  • 任何线程都使用线程的句柄调用TerminateThread函数
  • 任何线程都使用进程句柄调用TerminateProcess函数

在.NET中,
线程
不会与OS线程一一对应,因此您的项目符号列表不能100%代表.NET应用程序中线程的结束方式。另外,大多数.NET开发人员使用BCL而不是Win32 API调用。别误会,这篇文章很有用,尽管它没有.NET上下文。@Brian-你可能会注意到粗体部分。虽然托管线程可能与本机线程的工作方式不完全相同(即,NET使用OS线程来运行托管线程,但托管线程可能不会在其整个持续时间内在同一OS线程中运行),但我强调的部分对Luke很重要:线程函数返回时线程结束。作为旁注:我从未做过任何以.NET进程为目标的跨进程通信(因此需要使用本机WinAPI调用)——这听起来像是一个有趣的项目。好吧,谢谢。是的,我注意到了粗体部分。我并不是说你的答案有任何错误。我的意思是,如果项目符号列表有一个.NET的重点,它会更有用。实际上,这是一个很好的角度,但是如果它提到导致线程终止的.NET特定机制,则会更好。