System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(Mutex、Monitor、Interlocked、AutoResetEvent 等)外,此命名空间还包含一个 ThreadPool 类(它允许用户使用系统提供的线程池)和一个 Timer 类(它在线程池线程上执行回调方法)。
类 | 说明 | |
---|---|---|
![]() | AbandonedMutexException | 当某个线程获取由另一个线程放弃(即在未释放的情况下退出)的 Mutex 对象时引发的异常。 |
![]() | AutoResetEvent | 通知正在等待的线程已发生事件。无法继承此类。 |
![]() | CompressedStack | 提供方法用于设置和捕获当前线程上的压缩堆栈。无法继承此类。 |
![]() | EventWaitHandle | 表示一个线程同步事件。 |
![]() | ExecutionContext | 管理当前线程的执行上下文。无法继承此类。 |
![]() | HostExecutionContext | 在线程之间封装并传播宿主执行上下文。 |
![]() | HostExecutionContextManager | 提供使公共语言运行库宿主可以参与执行上下文的流动(或移植)的功能。 |
![]() | Interlocked | 为多个线程共享的变量提供原子操作。 |
![]() | ManualResetEvent | 通知一个或多个正在等待的线程已发生事件。无法继承此类。 |
![]() | Monitor | 提供同步访问对象的机制。 |
![]() | Mutex | 一个同步基元,也可用于进程间同步。 |
![]() | Overlapped | 提供一个 Win32 OVERLAPPED 结构的托管表示形式,包括将信息从 Overlapped 实例传输到 NativeOverlapped 结构的方法。 |
![]() | ReaderWriterLock | 定义支持单个写线程和多个读线程的锁。 |
![]() | RegisteredWaitHandle | 表示在调用 RegisterWaitForSingleObject 时已注册的句柄。无法继承此类。 |
![]() | Semaphore | 限制可同时访问某一资源或资源池的线程数。 |
![]() | SemaphoreFullException | 对计数已达到最大值的信号量调用 System.Threading.Semaphore.Release 方法时引发的异常。 |
![]() | SynchronizationContext | 提供在各种同步模型中传播同步上下文的基本功能。 |
![]() | SynchronizationLockException | 当某个方法请求调用方拥有给定 Monitor 上的锁时将引发该异常,而且由不拥有该锁的调用方调用此方法。 |
![]() | Thread | 创建并控制线程,设置其优先级并获取其状态。 |
![]() | ThreadAbortException | 在对 Abort 方法进行调用时引发的异常。无法继承此类。 |
![]() | ThreadExceptionEventArgs | 为 ThreadException 事件提供数据。 |
![]() | ThreadInterruptedException | 中断处于等待状态的 Thread 时引发的异常。 |
![]() | ThreadPool | 提供一个线程池,该线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。 |
![]() | ThreadStartException | 当基础操作系统线程已启动但该线程尚未准备好执行用户代码前,托管线程中出现错误,则会引发异常。 |
![]() | ThreadStateException | 当 Thread 处于对方法调用无效的 ThreadState 时引发的异常。 |
![]() | Timeout | 包含用于指定无限长的时间的常数。无法继承此类。 |
![]() | Timer | 提供以指定的时间间隔执行方法的机制。无法继承此类。 |
![]() | WaitHandle | 封装等待对共享资源的独占访问的操作系统特定的对象。 |
![]() | WaitHandleCannotBeOpenedException | 在试图打开不存在的系统互斥体或信号量时引发的异常。 |
结构 | 说明 | |
---|---|---|
![]() | AsyncFlowControl | 提供功能以还原执行上下文在线程之间的迁移(或流动)。 |
![]() | LockCookie | 定义实现单个编写器/多个阅读器语义的锁。这是值类型。 |
![]() | NativeOverlapped | 提供一种显式布局,它在非托管代码中可见,并将具有与 Win32 OVERLAPPED 结构相同的布局且在结尾有附加保留的字段。 |
委托 | 说明 | |
---|---|---|
![]() | ContextCallback | 表示要在新上下文中调用的方法。 |
![]() | IOCompletionCallback | 当 I/O 操作在线程池上完成时接收错误代码、字节数和重叠值类型。 |
![]() | ParameterizedThreadStart | 表示在 Thread 上执行的方法。 |
![]() | SendOrPostCallback | 表示在消息即将被调度到同步上下文时要调用的方法。 |
![]() | ThreadExceptionEventHandler | 表示将要处理 Application 的 ThreadException 事件的方法。 |
![]() | ThreadStart | 表示在 Thread 上执行的方法。 |
![]() | TimerCallback | 表示处理来自 Timer 的调用的方法。 |
![]() | WaitCallback | 表示线程池线程要执行的回调方法。 |
![]() | WaitOrTimerCallback | 表示当 WaitHandle 超时或终止时要调用的方法。 |
枚举 | 说明 | |
---|---|---|
![]() | ApartmentState | 指定 Thread 的单元状态。 |
![]() | EventResetMode | 指示在接收信号后是自动重置 EventWaitHandle 还是手动重置。 |
![]() | ThreadPriority | 指定 Thread 的调度优先级。 |
![]() | ThreadState | 指定 Thread 的执行状态。 |
备注:转自https://msdn.microsoft.com/zh-cn/library/system.threading(v=vs.85).aspx
****************************************
ThreadStart委托
ThreadStart 委托
.NET Framework 3.0
表示在 Thread 上执行的方法。
命名空间: System.Threading
程序集: mscorlib(在 mscorlib.dll 中)
语法:
[ComVisibleAttribute(true)] public delegate void ThreadStart ()
在创建托管的线程时,在该线程上执行的方法将通过一个传递给 Thread 构造函数的 ThreadStart 委托或 ParameterizedThreadStart 委托来表示。在调用 System.Threading.Thread.Start 方法之前,该线程不会开始执行。执行将从 ThreadStart 或 ParameterizedThreadStart 委托表示的方法的第一行开始。
![]() |
---|
Visual Basic 和 C# 用户在创建线程时可以省略 ThreadStart 或 ParameterizedThreadStart 委托构造函数。在 Visual Basic 中,将方法传递给 Thread 构造函数时使用 AddressOf 运算符,例如 Dim t As New Thread(AddressOf ThreadProc)。在 C# 中,只需指定线程过程的名称。编译器会选择正确的委托构造函数。 |
![]() |
---|
在 2.0 版的 .NET Framework 中,为 C++ 中的静态方法创建 ThreadStart 委托只需要一个参数:回调方法的地址(用类名限定)。在早期版本中,为静态方法创建委托需要两个参数:零(空)和方法地址。对于实例方法,所有版本都需要两个参数:实例变量和方法地址。 |
下面的代码示例演示用于创建 ThreadStart 委托以及将该委托与实例方法和静态方法一起使用的语法。
若想获得另一个演示如何创建 ThreadStart 委托的简单示例,请参见 Thread.Start 方法重载。有关创建线程的更多信息,请参见 启动时创建线程并传递数据。
using System; using System.Threading; class Test { static void Main() { // To start a thread using a static thread procedure, use the // class name and method name when you create the ThreadStart // delegate. Beginning in version 2.0 of the .NET Framework, // it is not necessary to create a delegate explicityly. // Specify the name of the method in the Thread constructor, // and the compiler selects the correct delegate. For example: // // Thread newThread = new Thread(Work.DoWork); // ThreadStart threadDelegate = new ThreadStart(Work.DoWork); Thread newThread = new Thread(threadDelegate); newThread.Start(); // To start a thread using an instance method for the thread // procedure, use the instance variable and method name when // you create the ThreadStart delegate. Beginning in version // 2.0 of the .NET Framework, the explicit delegate is not // required. // Work w = new Work(); w.Data = 42; threadDelegate = new ThreadStart(w.DoMoreWork); newThread = new Thread(threadDelegate); newThread.Start(); } }class Work { public static void DoWork() { Console.WriteLine("Static thread procedure."); } public int Data; public void DoMoreWork() { Console.WriteLine("Instance thread procedure. Data={0}", Data); } } /* This code example produces the following output (the order of the lines might vary): Static thread procedure. Instance thread procedure. Data=42 */
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
Windows Vista、Microsoft Windows XP SP2 和 Windows Server 2003 SP1 支持 Microsoft .NET Framework 3.0。
.NET Framework
受以下版本支持:3.0、2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0
XNA Framework
受以下版本支持:1.0
备注:转自https://msdn.microsoft.com/zh-cn/library/system.threading.threadstart(v=vs.85).aspx
转载于:https://blog.51cto.com/jiaojusuimu/1880625