using System.Threading; public class Program { static ManualResetEventSlim _evt = new ManualResetEventSlim(false); public static void Main() { // Wait for the event to be signaled _evt.Wait(); // Dispose the event _evt.Dispose(); } }
using System; using System.Threading; public class Program { static ManualResetEventSlim _evt1 = new ManualResetEventSlim(false); static ManualResetEventSlim _evt2 = new ManualResetEventSlim(false); public static void Main() { // Start the threads ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork1)); ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork2)); // Wait for both events to be signaled WaitHandle.WaitAll(new WaitHandle[] { _evt1.WaitHandle, _evt2.WaitHandle }); // Dispose the events _evt1.Dispose(); _evt2.Dispose(); } static void DoWork1(object state) { // Do some work... // Signal the event _evt1.Set(); } static void DoWork2(object state) { // Do some work... // Signal the event _evt2.Set(); } }Package/Library: System.Threading.