Применение основного потока

Как пояснялось в самом начале этой главы, у всякой программы на C# имеется хотя бы один поток исполнения, называемый основным. Этот поток программа получает автоматически, как только начинает выполняться. С основным потоком можно обращаться таким же образом, как и со всеми остальными потоками.

Для доступа к основному потоку необходимо получить объект типа Thread, который ссылается на него. Это делается с помощью свойства CurrentThread, являющегося членом класса Thread. Ниже приведена общая форма этого свойства.

Данное свойство возвращает ссылку на тот поток, в котором оно используется. Поэтому если свойство CurrentThread используется при выполнении кода в основном потоке, то с его помощью можно получить ссылку на основной поток. Имея в своем распоряжении такую ссылку, можно управлять основным потоком так же, как и любым другим потоком.

В приведенном ниже примере программы сначала получается ссылка на основной поток, а затем получаются и устанавливаются имя и приоритет основного потока.

// Продемонстрировать управление основным потоком.

using System;

using System.Threading;

class UseMain {

  static void Main() {

    Thread Thrd;

    // Получить основной поток.

    Thrd = Thread.CurrentThread;

    // Отобразить имя основного потока,

    if(Thrd.Name == null)

      Console.WriteLine("У основного потока нет имени.");

    else

      Console.WriteLine("Основной поток называется: " + Thrd.Name);

    // Отобразить приоритет основного потока.

    Console.WriteLine("Приоритет: " + Thrd.Priority);

    Console.WriteLine();

    // Установить имя и приоритет.

    Console.WriteLine("Установка имени и приоритета.");

    Thrd.Name = "Основной Поток";

    Thrd.Priority = ThreadPriority.AboveNormal;

    Console. WriteLine ("Теперь основной поток называется: " +

      Thrd.Name);

    Console.WriteLine("Теперь приоритет: " + Thrd.Priority);

  }

}

Ниже приведен результат выполнения этой программы.

У основного потока нет имени.

Приоритет: Normal

Установка имени и приоритета.

Теперь основной поток называется: Основной Поток

Теперь приоритет: AboveNormal

Следует, однако, быть очень внимательным, выполняя операции с основным потоком. Так, если добавить в конце метода Main() следующий вызов метода Join():

Thrd.Join();

программа никогда не завершится, поскольку она будет ожидать окончания основного потока!

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК