Example #1
0
        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();
            }
        }
Example #2
0
        // Используется делегат 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();
        }