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(); }
public delegate_example() { mydelegatehandler += MyNewMethod; }