示例#1
0
        static void Main(string [] args)
        {
            Console.OutputEncoding = Encoding.Default;
            Console.WriteLine("Thread Main: {0}",
                              Thread.CurrentThread.ManagedThreadId);
            MyNewDelegate newDel = Sum;
            ///  Запускання делегата в потоці
            ///  Приймає параметри:
            ///  1) Параметри які приймає сама структура делегата
            ///  2) Параметр типу AsyncCallback - це делегат, який викликається коли метод в потоці завершив роботу
            ///  3) Параметр типу object, може приймати любі дані
            IAsyncResult res = newDel.BeginInvoke(10, 10, new AsyncCallback((IAsyncResult r) => {
                //  Кол-бек делегат запускається в окремому потоці
                Console.WriteLine("Thread id callbackDelegate: {0}", Thread.CurrentThread.ManagedThreadId);
                AsyncResult ar    = (AsyncResult)r;
                MyNewDelegate del = ar.AsyncDelegate as MyNewDelegate;
                MessageBox.Show($"Метод Sum, запущений в потоці завершив виконання Результат: {del.EndInvoke(r)}",
                                "Програма");
            }), null);

            //  Очікування результата роботи метода в потоці властивістю IsCompleted, властивість постійно
            //  запитує в метода чи він завершив виуонання роботи
            //while (!res.IsCompleted)
            //{
            //    Console.WriteLine("Чекайте... (IsCompleted)");
            //    Thread.Sleep(1000);
            //}


            //  Очікування завершення роботи метода властивістю AsyncWaitHandle, який повідомляє
            //  про закінчення роботи і методом WaitOne через певний проміжок часу перевіряє чи метод
            //  в потоці закінчив сіою роботу
            //while (!res.AsyncWaitHandle.WaitOne(1000, true))
            //{
            //    Console.WriteLine("Чекайте... (AsyncWaitHandle)");
            //    Thread.Sleep(1000);
            //}
            //int answer = newDel.EndInvoke(res);
            Console.ReadLine();
        }
示例#2
0
 public delegate_example()
 {
     mydelegatehandler += MyNewMethod;
 }