Here. I'll give you a boilerplate on how to use ManualResetEvent to get what you want.
Adjust this for your code.
static void Main(string[] args)
{
ManualResetEvent event1 = new ManualResetEvent(false);
ManualResetEvent event2 = new ManualResetEvent(false);
ManualResetEvent event3 = new ManualResetEvent(false);
try
{
Thread thread1 = new Thread(new ParameterizedThreadStart(Start1));
Thread thread2 = new Thread(new ParameterizedThreadStart(Start2));
Thread thread3 = new Thread(new ParameterizedThreadStart(Start3));
thread1.Start(event1);
thread2.Start(event2);
thread3.Start(event3);
WaitHandle.WaitAll(new WaitHandle[] { event1, event2, event3 });
Console.WriteLine("Done!");
}
finally
{
event1.Dispose();
event2.Dispose();
event3.Dispose();
}
}
static void Start1(object waitHandle)
{
Thread.Sleep(300);
Console.WriteLine("Start1 complete");
((ManualResetEvent)waitHandle).Set();
}
static void Start2(object waitHandle)
{
Thread.Sleep(500);
Console.WriteLine("Start2 complete");
((ManualResetEvent)waitHandle).Set();
}
static void Start3(object waitHandle)
{
Thread.Sleep(100);
Console.WriteLine("Start 3 complete");
((ManualResetEvent)waitHandle).Set();
}
I hope that helps! Replace Thread.Sleep(x) with your actual work
Edited to add: Remember that your production code should be using
Task
or at least
ThreadPool.QueueUserWorkItem()
whenever possible. Using
Thread
isn't recommended despite what your prof is teaching you. Just a tip for down the road. Most of the stuff they teach in school isn't production ready =(. I wish it was.