Чтобы управлять активностью или временем жизни потока, надо решить массу задач. С Ътим позволяют справиться методы
Thread.
Например, довольно часто поток нужно приостановить. Это можно сделать, вызвав метод
Thread. Sleep,
который принимает единственный аргумент, представляющий собой время (в миллисекундах), на которое требуется приостановить поток. Заметьте: метод
Thread.Sleep
является статическим и не может быть вызван с экземпляром объекта
Thread.
На то есть веская причина. Не допускается вызывать
Thread.Sleep
для любого другого потока, кроме исполняемого в текущий момент. Статический метод
Thread.Sleep
вызывает статический же метод
CurrentThread,
который затем приостанавливает этот поток на указанное время. Пример:
using System;
using System.Threading;
class ThreadSleepApp
{
public static void WorkerThreadMethodQ
{
Console.WriteLine("Worker thread started");
int sleepTime = 5000;
Console.WriteLine("\tsleeping for {0} seconds",
sleepTime / 1000);
Thread.Sleep(sleepTime); // Приостановка на пять секунд. Console.WriteLine("\twaking up"); >
public static void Main()
{
ThreadStart worker = new ThreadStart(WorkerThreadMethod);
Console.WriteLine("Main - Creating worker thread");
Thread t = new Thread(worker); t.Start();
Console.WriteLine
("Main - Have requested the start of worker thread"); } }
Есть еще два способа вызова метода
Thread.Sleep.
Первый — вызов
Thread. Sleep
со значением
0.
При этом вы заставите текущий поток освободить неиспользованный остаток своего кванта. При передаче значения
Timeout. Infinite
поток будет приостановлен на неопределенно долгий срок, пока это состояние потока не будет прервано другим потоком, вызвавшим метод приостановленного потока
Thread.Interrupt.
Второй способ приостановить исполнение потока — вызов метода
Thread.Suspend.
Между этими методиками несколько важных отличий. Во-первых, можно вызвать метод
Thread. Suspend
для потока, исполняемого в текущий момент, или для другого потока. Во-вторых, если таким образом приостановить выполнение потока, любой другой поток способен возобновить его выполнение с помощью метода
Thread. Resume.
Обратите внимание, что, когда один поток приостанавливает выполнение другого, первый поток не блокируется. Возврат управления после вызова происходит немедленно. Кроме того, единственный вызов
Thread.Resume
возобновит исполнение данного потока независимо от числа вызовов метода
Thread.Suspend,
выполненных ранее.