На этом шаге мы рассмотрим назначение этого класса для создания потоков.
Прежде чем приступить к рассмотрению вопросов, связанных с многопоточным программированием, имеет смысл уточнить, что же это такое. Вообще, потоками называются разные части программы, которые выполняются одновременно. Именно в одновременном выполнении нескольких блоков программного кода кроется "изюминка" многопоточного программирования. В языке C# предусмотрены простые и эффективные средства для реализации многопоточного способа программирования. С этими средствами мы намерены познакомиться.
Стратегическая задача состоит из двух подзадач. Во-первых, необходимо определить блоки программного кода, которые будут выполняться одновременно (код, выполняемый в потоке). Во-вторых, необходимо запустить эти коды на выполнение в специальном режиме (чтобы они выполнялись одновременно). Для запуска программного кода на выполнение в режиме потока нам понадобится специальный объект - объект потока. Создается такой объект на основе класса Thread.
Создание объекта потока не означает, что поток начинает выполняться. Для запуска потока на выполнение из объекта этого потока необходимо вызвать метод Start().
То есть здесь все относительно просто: создаем объект класса Thread и вызываем из этого объекта метод Start(). Но открытым остается вопрос о том, как связать объект потока с программным кодом, который должен выполняться в потоке. Такое "связывание" происходит на этапе создания объекта потока. Происходит это так: при создании объекта потока на основе класса Thread в качестве аргумента конструктору передается ссылка на экземпляр делегата ThreadStart. Предполагается, что экземпляр делегата содержит ссылку на метод или методы, которые будут вызваны при выполнении потока. Делегат ThreadStart определен для методов без аргументов, не возвращающих результат.
Если мы хотим, чтобы в потоке выполнялось несколько методов (последовательно, один за другим), то имеет смысл создать экземпляр делегата ThreadStart, записать в него ссылки на соответствующие методы, а ссылку на экземпляр передать аргументом конструктору класса Thread (при создании объекта потока).
На следующем шаге мы закончим изучение этого вопроса.