ThreadStart:
Делегат ThreadStart визначається як void ThreadStart(), що означає, що виконаний метод не може мати параметрів. ThreadStart threadStart=new ThreadStart(Обчислити); Thread thread=new Thread(threadStart); Тема. Start(); Обчислити публічну порожнечу() { подвійний діаметр=0,5; Console.write("Площа кола з діаметром {0} дорівнює {1}"Діаметр, Діаметр*Math.PI); } Тут ми використовуємо делегат, який визначає тип ThreadStart, що визначає метод, необхідний для виконання: Обчислення, при якому обчислюється окружність кола діаметром 0,5, і виводить. Це є найпростішим прикладом багатопотокності, що в багатьох випадках є достатнім
ParameterThreadStart: ParameterThreadStart визначається як void ParameterizedThreadStart (стан об'єкта), і функція запуску потоку, визначеного за допомогою цього делегата, може приймати вхідний параметр, наприклад:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=нова нитка() ; Тема. Старт (0,9); public void Обчислити (object arg)
{ подвійний діаметр=подвійний (arg); Console.write("Площа кола з діаметром {0} дорівнює {1}"Діаметр, Діаметр*Math.PI);
}
Метод Calculate має параметр типу об'єкта, хоча є лише один параметр, і це також тип об'єкта, і його все одно потрібно конвертувати при використанні, але, на щастя, параметри можуть існувати, і комбінуючи кілька параметрів у клас, а потім передаючи екземпляр цього класу як параметр, можна досягти передачі кількох параметрів. Наприклад, що саме:
клас AddParams
{ Публічні міжнародні A, B;
public AddParams (int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
Програма класу
{ static void Main(string[] args) { Console.WriteLine ("***** Додавання за допомогою об'єктів потоку *****"); Console.WriteLine("ID потоку в Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = нові AddParams(10, 10); Потік t = новий Thread(new ParameterizedThreadStart(Add)); т.Старт (ap); Console.ReadLine(); }
#region Метод додавання static void Add(дані об'єкта) { якщо (дані — це AddParams) { Console.WriteLine("ID потоку в Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} — {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |