c# System.Threading.Thread

 1 using System;
 2 using System.Threading;
 3 
 4 // Simple threading scenario:  Start a static method running
 5 // on a second thread.
 6 public class ThreadExample {
 7     // The ThreadProc method is called when the thread starts.
 8     // It loops ten times, writing to the console and yielding 
 9     // the rest of its time slice each time, and then ends.
10     public static void ThreadProc() {
11         for (int i = 0; i < 10; i++) {
12             Console.WriteLine("ThreadProc: {0}", i);
13             // Yield the rest of the time slice.
14             Thread.Sleep(0);
15         }
16     }
17 
18     public static void Main() {
19         Console.WriteLine("Main thread: Start a second thread.");
20         // The constructor for the Thread class requires a ThreadStart 
21         // delegate that represents the method to be executed on the 
22         // thread.  C# simplifies the creation of this delegate.
23         Thread t = new Thread(new ThreadStart(ThreadProc));
24 
25         // Start ThreadProc.  Note that on a uniprocessor, the new 
26         // thread does not get any processor time until the main thread 
27         // is preempted or yields.  Uncomment the Thread.Sleep that 
28         // follows t.Start() to see the difference.
29         t.Start();
30         //Thread.Sleep(0);
31 
32         for (int i = 0; i < 4; i++) {
33             Console.WriteLine("Main thread: Do some work.");
34             Thread.Sleep(0);
35         }
36 
37         Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
38         t.Join();
39         Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
40         Console.ReadLine();
41     }
42 }
 1 using System;
 2 using System.Threading;
 3 
 4 // Simple threading scenario:  Start a static method running
 5 // on a second thread.
 6 public class ThreadExample {
 7     // The ThreadProc method is called when the thread starts.
 8     // It loops ten times, writing to the console and yielding 
 9     // the rest of its time slice each time, and then ends.
10     
11     private static ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
12     
13     public static void show(String thread_name, int run_count)
14     {
15         //cacheLock.EnterWriteLock();
16         
17         for (int i = 0; i < run_count; i++) {
18             Console.WriteLine("{0} runs {1}.", thread_name, i);
19             //Console.WriteLine("ThreadProc: {0}", i);
20             // Yield the rest of the time slice.
21             Thread.Sleep(0);
22         }
23         //cacheLock.ExitWriteLock();
24     }
25     
26     public static void ThreadProc() {
27         string name = Thread.CurrentThread.Name;
28         show(name, 10);
29         /*
30         cacheLock.EnterReadLock();
31         
32         Console.WriteLine("{0} runs.", name);
33         
34         for (int i = 0; i < 10; i++) {
35             
36             Console.WriteLine("ThreadProc: {0}", i);
37             // Yield the rest of the time slice.
38             Thread.Sleep(0);
39         }
40         cacheLock.ExitReadLock();*/
41     }
42 
43     public static void Main() {
44         Console.WriteLine("Main thread: Start a second thread.");
45         // The constructor for the Thread class requires a ThreadStart 
46         // delegate that represents the method to be executed on the 
47         // thread.  C# simplifies the creation of this delegate.
48         for (int i = 1; i < 5; i++)
49         {
50             Thread t = new Thread(ThreadProc);
51             t.Name = "Thread_" + i;
52             t.Start();
53         }
54         Thread.Sleep(250);
55         //Thread t = new Thread(new ThreadStart(ThreadProc));
56 
57         // Start ThreadProc.  Note that on a uniprocessor, the new 
58         // thread does not get any processor time until the main thread 
59         // is preempted or yields.  Uncomment the Thread.Sleep that 
60         // follows t.Start() to see the difference.
61         //t.Start();
62         //Thread.Sleep(1);
63 
64         for (int i = 0; i < 4; i++) {
65             Console.WriteLine("Main thread: Do some work.");
66             Thread.Sleep(0);
67         }
68 
69         Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
70         //t.Join();
71         Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
72         Console.ReadLine();
73     }
74 }

构造函数 

Thread(ParameterizedThreadStart)

Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。

Thread(ParameterizedThreadStart, Int32)

Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。

Thread(ThreadStart)

Thread 类的新实例。

Thread(ThreadStart, Int32)

Thread 类的新实例,指定线程的最大堆栈大小。

属性 

ApartmentState

获取或设置此线程的单元状态。

CurrentContext

获取线程正在其中执行的当前上下文。

CurrentCulture

获取或设置当前线程的区域性。

CurrentPrincipal

获取或设置线程的当前负责人(对基于角色的安全性而言)。

CurrentThread

获取当前正在运行的线程。

CurrentUICulture

获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源。

ExecutionContext

ExecutionContext 对象,该对象包含有关当前线程的各种上下文的信息。

IsAlive

获取指示当前线程的执行状态的值。

IsBackground

获取或设置一个值,该值指示某个线程是否为后台线程。

IsThreadPoolThread

获取指示线程是否属于托管线程池的值。

ManagedThreadId

获取当前托管线程的唯一标识符。

Name

获取或设置线程的名称。

Priority

获取或设置指示线程的调度优先级的值。

ThreadState

获取一个值,该值包含当前线程的状态。

方法 

Abort()

调用此方法通常会终止线程。

Abort(Object)

调用此方法通常会终止线程。

AllocateDataSlot()

ThreadStaticAttribute 特性标记的字段。

AllocateNamedDataSlot(String)

ThreadStaticAttribute 特性标记的字段。

BeginCriticalRegion()

通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理异常的影响可能会危害应用程序域中的其他任务。

BeginThreadAffinity()

通知主机托管代码将要执行依赖于当前物理操作系统线程的标识的指令。

DisableComObjectEagerCleanup()

对于当前线程关闭运行时可调用包装 (RCW) 的自动清理。

EndCriticalRegion()

通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理异常的影响限于当前任务。

EndThreadAffinity()

通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令。

Equals(Object)

确定指定的对象是否等于当前对象。

(Inherited from Object)
Finalize()

Thread 对象时释放资源并执行其他清理操作。

FreeNamedDataSlot(String)

ThreadStaticAttribute 特性标记的字段。

GetApartmentState()

ApartmentState 值。

GetCompressedStack()

CompressedStack 对象,此对象可用于获取当前线程的堆栈。

GetData(LocalDataStoreSlot)

ThreadStaticAttribute 特性标记的字段。

GetDomain()

返回当前线程正在其中运行的当前域。

GetDomainID()

返回唯一的应用程序域标识符。

GetHashCode()

返回当前线程的哈希代码。

GetNamedDataSlot(String)

ThreadStaticAttribute 特性标记的字段。

GetType()

Type。

(Inherited from Object)
Interrupt()

WaitSleepJoin 线程状态的线程。

Join()

SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止。

Join(Int32)

在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止。

Join(TimeSpan)

在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止。

MemberwiseClone()

Object 的浅表副本。

(Inherited from Object)
MemoryBarrier()

MemoryBarrier() 调用之前的内存存取的方式。

ResetAbort()

Abort(Object)。

Resume()

继续已挂起的线程。

SetApartmentState(ApartmentState)

在线程启动前设置其单元状态。

SetCompressedStack(CompressedStack)

CompressedStack 应用到当前线程。

SetData(LocalDataStoreSlot, Object)

ThreadStaticAttribute 属性标记的字段。

Sleep(Int32)

将当前线程挂起指定的毫秒数。

Sleep(TimeSpan)

将当前线程挂起指定的时间。

SpinWait(Int32)

iterations 参数定义的时间量。

Start()

Running。

Start(Object)

Running,并选择提供包含线程执行的方法要使用的数据的对象。

Suspend()

挂起线程,或者如果线程已挂起,则不起作用。

ToString()

返回表示当前对象的字符串。

(Inherited from Object)
TrySetApartmentState(ApartmentState)

在线程启动前设置其单元状态。

VolatileRead(Byte)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(Double)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(Int16)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(Int32)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(Int64)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(IntPtr)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(Object)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(SByte)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(Single)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(UInt16)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(UInt32)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(UInt64)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileRead(UIntPtr)

无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。

VolatileWrite(Byte, Byte)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(Double, Double)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(Int16, Int16)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(Int32, Int32)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(Int64, Int64)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(IntPtr, IntPtr)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(Object, Object)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(SByte, SByte)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(Single, Single)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(UInt16, UInt16)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(UInt32, UInt32)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(UInt64, UInt64)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

VolatileWrite(UIntPtr, UIntPtr)

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。

Yield()

由操作系统选择要执行的线程。