C# ManualResetEvent的使用

  1 using System;

  2 using System.Threading;

  3 

  4 public class Example

  5 {

  6     // mre is used to block and release threads manually. It is

  7     // created in the unsignaled state.

  8     private static ManualResetEvent mre = new ManualResetEvent(false);

  9 

 10     static void Main()

 11     {

 12         Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n");

 13 

 14         for(int i = 0; i <= 2; i++)

 15         {

 16             Thread t = new Thread(ThreadProc);

 17             t.Name = "Thread_" + i;

 18             t.Start();

 19         }

 20 

 21         Thread.Sleep(500);

 22         Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" +

 23                           "\nto release all the threads.\n");

 24         Console.ReadLine();

 25 

 26         mre.Set();

 27 

 28         Thread.Sleep(500);

 29         Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" +

 30                           "\ndo not block. Press Enter to show this.\n");

 31         Console.ReadLine();

 32 

 33         for(int i = 3; i <= 4; i++)

 34         {

 35             Thread t = new Thread(ThreadProc);

 36             t.Name = "Thread_" + i;

 37             t.Start();

 38         }

 39 

 40         Thread.Sleep(500);

 41         Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" +

 42                           "\nwhen they call WaitOne().\n");

 43         Console.ReadLine();

 44 

 45         mre.Reset();

 46 

 47         // Start a thread that waits on the ManualResetEvent.

 48         Thread t5 = new Thread(ThreadProc);

 49         t5.Name = "Thread_5";

 50         t5.Start();

 51 

 52         Thread.Sleep(500);

 53         Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");

 54         Console.ReadLine();

 55 

 56         mre.Set();

 57 

 58         // If you run this example in Visual Studio, uncomment the following line:

 59         //Console.ReadLine();

 60     }

 61 

 62 

 63     private static void ThreadProc()

 64     {

 65         string name = Thread.CurrentThread.Name;

 66 

 67         Console.WriteLine(name + " starts and calls mre.WaitOne()");

 68 

 69         mre.WaitOne();

 70 

 71         Console.WriteLine(name + " ends.");

 72     }

 73 }

 74 

 75 /* This example produces output similar to the following:

 76 

 77 Start 3 named threads that block on a ManualResetEvent:

 78 

 79 Thread_0 starts and calls mre.WaitOne()

 80 Thread_1 starts and calls mre.WaitOne()

 81 Thread_2 starts and calls mre.WaitOne()

 82 

 83 When all three threads have started, press Enter to call Set()

 84 to release all the threads.

 85 

 86 

 87 Thread_2 ends.

 88 Thread_0 ends.

 89 Thread_1 ends.

 90 

 91 When a ManualResetEvent is signaled, threads that call WaitOne()

 92 do not block. Press Enter to show this.

 93 

 94 

 95 Thread_3 starts and calls mre.WaitOne()

 96 Thread_3 ends.

 97 Thread_4 starts and calls mre.WaitOne()

 98 Thread_4 ends.

 99 

100 Press Enter to call Reset(), so that threads once again block

101 when they call WaitOne().

102 

103 

104 Thread_5 starts and calls mre.WaitOne()

105 

106 Press Enter to call Set() and conclude the demo.

107 

108 Thread_5 ends.

109  */


原文来自:http://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

你可能感兴趣的:(event)