ThreadStart:
Делегат ThreadStart определяется как void ThreadStart(), что означает, что выполняемый метод не может иметь параметров. ThreadStart threadStart=new ThreadStart(Вычислить); Thread thread=new Thread(threadStart); Тема. Start(); публичная пустота. Вычислить() { двойной диаметр=0,5; Console.Write ("Площадь окружности с диаметром {0} равна {1}"Diameter,Diameter*Math.PI); } Здесь используется делегат, определяющий тип ThreadStart, который определяет метод, необходимый для выполнения потока: Вычислять, при котором вычисляется окружность окружности диаметром 0,5, и вывод. Это самый простой пример многопоточности, что во многих случаях достаточно
ParameterThreadStart: ParameterThreadStart определяется как void ParameterizedThreadStart (состояние объекта), и функция запуска потока, определённого с помощью этого делегата, может принимать входный параметр, например:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=новая Thread() ; Тема. Старт (0,9); public void Вычислить (object arg)
{ двойной диаметр=двойной (arg); Console.Write ("Площадь окружности с диаметром {0} равна {1}"Diameter,Diameter*Math.PI);
}
Метод Calculate имеет параметр типа объекта, хотя параметр только один, и это тоже тип объекта, и его всё равно нужно преобразовывать при его использовании, но, к счастью, параметры могут быть, и объединив несколько параметров в класс, а затем передавая экземпляр этого класса как параметр, можно добиться передачи нескольких параметров. Как что:
класс AddParams
{ Публичные INT 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 = новый поток(новый ParameterizedThreadStart(Add)); t.Start(ap); Console.ReadLine(); }
#region Метод добавления статический вакуум 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
}
} |