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 类的新实例,指定容许对象在线程启动时传递给线程的委托。android |
Thread(ParameterizedThreadStart, Int32) | 初始化 Thread 类的新实例,指定容许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。ios |
Thread(ThreadStart) | 初始化 Thread 类的新实例。api |
Thread(ThreadStart, Int32) | 初始化 Thread 类的新实例,指定线程的最大堆栈大小。缓存 |
ApartmentState | 获取或设置此线程的单元状态。安全 |
CurrentContext | 获取线程正在其中执行的当前上下文。app |
CurrentCulture | 获取或设置当前线程的区域性。dom |
CurrentPrincipal | 获取或设置线程的当前负责人(对基于角色的安全性而言)。函数 |
CurrentThread | 获取当前正在运行的线程。oop |
CurrentUICulture | 获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源。性能 |
ExecutionContext | 获取 ExecutionContext 对象,该对象包含有关当前线程的各类上下文的信息。 |
IsAlive | 获取指示当前线程的执行状态的值。 |
IsBackground | 获取或设置一个值,该值指示某个线程是否为后台线程。 |
IsThreadPoolThread | 获取指示线程是否属于托管线程池的值。 |
ManagedThreadId | 获取当前托管线程的惟一标识符。 |
Name | 获取或设置线程的名称。 |
Priority | 获取或设置指示线程的调度优先级的值。 |
ThreadState | 获取一个值,该值包含当前线程的状态。 |
Abort() | 在调用此方法的线程上引起 ThreadAbortException,以开始终止此线程的过程。 调用此方法一般会终止线程。 |
Abort(Object) | 引起在其上调用的线程中的 ThreadAbortException 以开始处理终止线程,同时提供有关线程终止的异常信息。 调用此方法一般会终止线程。 |
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() | 在继续执行标准的 COM 和 |
Join(Int32) | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或通过了指定时间为止。 |
Join(TimeSpan) | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或通过了指定时间为止。 |
MemberwiseClone() | 建立当前 Object 的浅表副本。 (Inherited from Object) |
MemoryBarrier() | 按以下方式同步内存访问:执行当前线程的处理器在对指令从新排序时,不能采用先执行 MemoryBarrier() 调用以后的内存存取,再执行 MemoryBarrier() 调用以前的内存存取的方式。 |
ResetAbort() | 取消当前线程所请求的 Abort(Object)。 |
Resume() | 继续已挂起的线程。 |
SetApartmentState(ApartmentState) | 在线程启动前设置其单元状态。 |
SetCompressedStack(CompressedStack) | 将捕获的 CompressedStack 应用到当前线程。 |
SetData(LocalDataStoreSlot, Object) | 在当前正在运行的线程上为此线程的当前域在指定槽中设置数据。 为了提升性能,请改用用 ThreadStaticAttribute 属性标记的字段。 |
Sleep(Int32) | 将当前线程挂起指定的毫秒数。 |
Sleep(TimeSpan) | 将当前线程挂起指定的时间。 |
SpinWait(Int32) | 致使线程等待由 |
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() | 致使调用线程执行准备好在当前处理器上运行的另外一个线程。 由操做系统选择要执行的线程。 |