最好的参考文档莫过于直接参看Thread 类,由于在.net 中,代码是未开源的,但是我们也是可以通过该类让我们获取一定的信息去使用该类。
例如初始化Thread实例:
public Thread(ThreadStart start);
[ComVisible(true)]
public delegate void ThreadStart();
通过这个构造函数,可以看出,初始化时,参数是一个委托,一个无参无返回值的委托。
再者
[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start);
[ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
通过这个构造函数,在进行实例化时,便可以使用一个带一个object参数的委托进行实例化。
代码实现:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ClassThreadDemo
{
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(Say);
// t1 = new Thread(new ThreadStart(Say));
t1.Start();
Thread t2 = new Thread(new ParameterizedThreadStart(Sayx));
t2.Start(100);
Console.ReadLine();
}
private static void Sayx(object x)
{
Console.WriteLine(x.ToString());
}
private static void Say()
{
Console.WriteLine("x + y");
}
}
}
析构函数:
//
// 摘要:
// 确保垃圾回收器回收 System.Threading.Thread 对象时释放资源并执行其他清理操作。
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[SecuritySafeCritical]
~Thread();
Thread Class Code:
#region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\mscorlib.dll
#endregion
using System.Globalization;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Runtime.Remoting.Contexts;
using System.Security;
using System.Security.Principal;
namespace System.Threading
{
//
// 摘要:
// 创建和控制线程,设置其优先级并获取其状态。
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(_Thread))]
[ComVisible(true)]
public sealed class Thread : CriticalFinalizerObject, _Thread
{
//
// 摘要:
// 初始化 System.Threading.Thread 类的新实例。
//
// 参数:
// start:
// 表示开始执行此线程时要调用的方法的 System.Threading.ThreadStart 委托。
//
// 异常:
// T:System.ArgumentNullException:
// start 参数为 null。
[SecuritySafeCritical]
public Thread(ThreadStart start);
//
// 摘要:
// 初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。
//
// 参数:
// start:
// 一个委托,它表示此线程开始执行时要调用的方法。
//
// 异常:
// T:System.ArgumentNullException:
// start 为 null。
[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start);
//
// 摘要:
// 初始化 System.Threading.Thread 类的新实例,指定线程的最大堆栈大小。
//
// 参数:
// start:
// 表示开始执行此线程时要调用的方法的 System.Threading.ThreadStart 委托。
//
// maxStackSize:
// 线程要使用的最大堆栈大小(以字节为单位);如果为 0,则使用可执行文件的文件头中指定的默认最大堆栈大小。 重要事项:对于部分受信任的代码,如果 maxStackSize
// 大于默认堆栈大小,则将其忽略。 不引发异常。
//
// 异常:
// T:System.ArgumentNullException:
// start 为 null。
//
// T:System.ArgumentOutOfRangeException:
// maxStackSize 小于零。
[SecuritySafeCritical]
public Thread(ThreadStart start, int maxStackSize);
//
// 摘要:
// 初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。
//
// 参数:
// start:
// 表示开始执行此线程时要调用的方法的 System.Threading.ParameterizedThreadStart 委托。
//
// maxStackSize:
// 线程要使用的最大堆栈大小(以字节为单位);如果为 0,则使用可执行文件的文件头中指定的默认最大堆栈大小。 重要事项:对于部分受信任的代码,如果 maxStackSize
// 大于默认堆栈大小,则将其忽略。 不引发异常。
//
// 异常:
// T:System.ArgumentNullException:
// start 为 null。
//
// T:System.ArgumentOutOfRangeException:
// maxStackSize 小于零。
[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start, int maxStackSize);
//
// 摘要:
// 确保垃圾回收器回收 System.Threading.Thread 对象时释放资源并执行其他清理操作。
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[SecuritySafeCritical]
~Thread();
//
// 摘要:
// 获取或设置线程的当前负责人(对基于角色的安全性而言)。
//
// 返回结果:
// 表示安全上下文的 System.Security.Principal.IPrincipal 值。
//
// 异常:
// T:System.Security.SecurityException:
// 调用方没有设置该主体所需的权限。
public static IPrincipal CurrentPrincipal { get; set; }
//
// 摘要:
// 获取当前正在运行的线程。
//
// 返回结果:
// System.Threading.Thread,表示当前正在运行的线程。
public static Thread CurrentThread { get; }
//
// 摘要:
// 获取线程正在其中执行的当前上下文。
//
// 返回结果:
// 表示当前线程上下文的 System.Runtime.Remoting.Contexts.Context。
//
// 异常:
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public static Context CurrentContext { get; }
//
// 摘要:
// 获取或设置当前线程的区域性。
//
// 返回结果:
// 表示当前线程的区域性的对象。
//
// 异常:
// T:System.ArgumentNullException:
// 属性设置为 null。