Csharp/CSharp Tutorial/Thread/ManualResetEvent

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

Use a manual event object.

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.");
  }   
}
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