public static void Add(object data) { if (data is AddParams) { Console.WriteLine("ID of thread in Add(): {0}", Thread.CurrentThread.ManagedThreadId); AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b); // Сообщить первому потоку о том, что работа завершена. Sample1.waitHandle.Set(); } }
// Используется делегат ParameterizedThreadStart public static void ParameterizedThreadStartSample() { Console.WriteLine("***** Adding with Thread objects *****"); Console.WriteLine("ID of thread in MainO : {0}", Thread.CurrentThread.ManagedThreadId); // Создать объект AddParams для передачи вторичному потоку. AddParams ap = new AddParams(10, 10); Thread t = new Thread(new ParameterizedThreadStart(Printer.Add)); t.Start(ap); // Подождать, пока другой поток завершится. //Thread.Sleep(5); // <- плохой способ // Ожидать, пока не поступит уведомление! Блокирует текущий поток. waitHandle.WaitOne(); Console.WriteLine("Работа второго потока завершена!"); Console.ReadLine(); }