Csharp/CSharp Tutorial/Thread/ManualResetEvent — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:20, 26 мая 2010

Use a manual event object.

<source lang="csharp">using System; using System.Threading;

class MyThread {

 public Thread thrd;  
 ManualResetEvent manualResetEvent;  
  
 public MyThread(string name, ManualResetEvent e) {   
   thrd = new Thread(this.run);   
   thrd.Name = name;  
   manualResetEvent = e;  
   thrd.Start();   
 }   
  
 void run() {   
   Console.WriteLine("Inside thread " + thrd.Name);  
 
   for(int i=0; i<50; i++) {  
     Console.WriteLine(thrd.Name);  
     Thread.Sleep(50);  
   }  
 
   Console.WriteLine(thrd.Name + " Done!");  
 
   manualResetEvent.Set();
 }   

}

class MainClass {

 public static void Main() {   
   ManualResetEvent evtObj = new ManualResetEvent(false);  
 
   MyThread myThread = new MyThread("Event Thread 1", evtObj);   
   Console.WriteLine("Main thread waiting for event.");
   // Wait for signaled event.
   evtObj.WaitOne();
   Console.WriteLine("Main thread received first event.");
   evtObj.Reset(); 
   myThread = new MyThread("Event Thread 2", evtObj);   
   // Wait for signaled event.
   evtObj.WaitOne();
   Console.WriteLine("Main thread received second event.");
 }   

}</source>

Inside thread Event Thread 1
Event Thread 1
Main thread waiting for event.
Event Thread 1
Event Thread 1
Event Thread 1
Event Thread 1
Event Thread 1
Event Thread 1
Event Thread 1
Event Thread 1
^CTerminate batch job (Y/N)? n