Count = 0; thrdName = name;
}
// Точка входа в поток, public void Run() {
Console.WriteLine(thrdName + " начат.");
do {
Thread.Sleep(500);
Console.WriteLine("В потоке " + thrdName + ", Count = " + Count);
Count++;
} while(Count < 10);
Console.WriteLine(thrdName + " завершен.");
}
class MultiThread { static void Main() {
Console.WriteLine("Основной поток начат.");
// Сначала сконструировать объект типа MyThread.
MyThread mt = new MyThread("Потомок #1");
// Далее сконструировать поток из этого объекта.
Thread newThrd = new Thread(mt.Run);
// И наконец, начать выполнение потока. newThrd.Start(); do {
Console.Write(".");
Thread.Sleep(100);
} while (mt.Count != 10);
Console.WriteLine("Основной поток завершен.");
}
}
Рассмотрим приведенную выше программу более подробно. В самом ее начале определяется классMyThread,предназначенный для создания второго потока исполнения. В методе Run () этого класса организуется цикл для подсчета от 0 до 9. Обратите внимание на вызов статического методаSleep (), определенного в классеThread.Этот метод обусловливает приостановление того потока, из которого он был вызван, на определенный период времени, указываемый в миллисекундах. Когда приостанавливается один поток, может выполняться другой. В данной программе используется следующая форма методаSleep():
public static void Sleep(int
где
В методеMain() новый объект типаThreadсоздается с помощью приведенной ниже последовательности операторов.
// Сначала сконструировать объект типа MyThread.
MyThread mt = new MyThread("Потомок #1");
// Далее сконструировать поток из этого объекта.
Thread newThrd = new Thread(mt.Run);
// И наконец, начать выполнение потока. newThrd.Start();
Как следует из комментариев к приведенному выше фрагменту кода, сначала создается объект типаMyThread.Затем этот объект используется для создания объекта типаThread,для чего конструктору этого объекта в качестве точки входа передается методmt.Run (). И наконец, выполнение потока начинается с вызова методаStart ().