C# Thread详解

一、类Thread的定义

public sealed partial class Thread : CriticalFinalizerObject

Thread类只继承了一个抽象类CritiacalFinalizerObject

二、Thread内部的定义的类

1、StartHelper类

1.1、类StartHelper的定义

private sealed class StartHelper

1.2、类StartHelper中的定义的字段

//该线程中允许使用的最大栈深
internal int _maxStackSize;
//该字段用于保存创建线程时传入的委托
internal Delegate _start;
//该字段用于保存通过调用start方法传入的参数(提供该给委托使用的参数)
internal object? _startArg;
//使用的文化信息
internal CultureInfo? _culture;
internal CultureInfo? _uiCulture;
//使用的执行上下文
internal ExecutionContext? _executionContext;
//public delegate void ContextCallback(object? state);
//internal delegate void ContextCallback(ref TState state);
//ContextCallback是一个委托声明
internal static readonly ContextCallback s_threadStartContextCallback = new ContextCallback(Callback);

1.3、类StartHelper中的方法

1.3.1、Run方法
[MethodImpl(MethodImplOptions.AggressiveInlining)] // avoid long-lived stack frame in many threads
internal void Run(){
   
	if (_executionContext != null && !_executionContext.IsDefault){
   
		//如果指定了执行上下文(_exectuionContext不为null,且不为默认的执行上下文),只是用指定的上下文执行委托
		ExecutionContext.RunInternal(_executionContext, s_threadStartContextCallback, this);
	}else{
   
		//如果没有指定的上下文或者指定的是默认的上文则直接调用RunWork执行委托
        RunWorker();
	}
}

注:ExecutionContext的相关内容见https://editor.csdn.net/md/?articleId=117068899

1.3.2、RunWorker方法

该方法中真正执行了委托

  [MethodImpl(MethodImplOptions.AggressiveInlining)] // avoid long-lived stack frame in many threads
private void RunWorker(){
   
	//初始化线程使用的语言环境
	InitializeCulture()

你可能感兴趣的:(#,多线程,C#)