Читаем C# 4.0: полное руководство полностью

Метод Abort() создает необходимые условия Для генерирования исключения ThreadAbortException в том потоке, для которого он был вызван. Это исключение приводит к прерыванию потока и может быть перехвачено и в коде программы, но в этом случае оно автоматически генерируется еще раз, чтобы остановить поток. Метод Abort() не всегда способен остановить поток немедленно, поэтому если поток требуется остановить перед тем, как продолжить выполнение программы, то после метода Abort() следует сразу же вызвать метод Join(). Кроме того, в самых редких случаях методу Abort() вообще не удается остановить поток. Это происходит, например, в том случае, если кодовый блок finally входит в бесконечный цикл.

В приведенном ниже примере программы демонстрируется применение метода Abort() для прерывания потока.

// Прервать поток с помощью метода Abort().

using System;

using System.Threading;

class MyThread {

  public Thread Thrd;

  public MyThread(string name) {

    Thrd = new Thread(this.Run);

    Thrd.Name = name;

    Thrd.Start();

  }

  // Это точка входа в поток,

  void Run() {

    Console.WriteLine(Thrd.Name + " начат.");

    for (int i = 1; i <= 1000; i++) {

      Console.Write(i + " ");

      if((i %10)==0) {

        Console.WriteLine();

        Thread.Sleep(250);

      }

    }

    Console .WriteLine (Thrd.Name + " завершен.");

  }

}

class StopDemo {

  static void Main() {

    MyThread mt1 = new MyThread("Мой Поток");

    Thread.Sleep(1000); // разрешить порожденному потоку начать свое выполнение

    Console.WriteLine("Прерывание потока.");

    mt1.Thrd.Abort();

    mt1.Thrd.Join(); // ожидать прерывания потока

    Console.WriteLine("Основной поток прерван.");

  }

}

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

Мой Поток начат.

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

Прерывание потока.

Основной поток прерван.

-----------------------------

ПРИМЕЧАНИЕ

Метод Abort() не следует применять в качестве обычного средства прерывания потока, поскольку он предназначен для особых случаев. Обычно поток должен завершаться естественным образом, чтобы произошел возврат из метода, выполняющего роль точки входа в него.

-----------------------------

Другая форма метода Abort()

В некоторых случаях оказывается полезной другая форма метода Abort(), приведенная ниже в общем виде:

public void Abort(object stateInfo)

где statelnfo обозначает любую информацию, которую требуется передать потоку, когда он останавливается. Эта информация доступна посредством свойства ExceptionState из класса исключения ThreadAbortException. Подобным образом потоку можно передать код завершения. В приведенном ниже примере программы демонстрируется применение данной формы метода Abort().

// Использовать форму метода Abort (object stateInfo) .

using System;

using System.Threading;

class MyThread {

  public Thread Thrd;

  public MyThread(string name) {

    Thrd = new Thread(this.Run);

    Thrd.Name = name;

    Thrd.Start();

  }

  // Это точка входа в поток,

  void Run() {

    try {

      Console.WriteLine(Thrd.Name + " начат.");

      for (int i = 1; i <= 1000; i++)    {

        Console.Write(i + " ");

        if((i%10)==0) {

          Console.WriteLine();

          Thread.Sleep(250);

        }

      }

      Console.WriteLine(Thrd.Name + " завершен нормально.");

    } catch(ThreadAbortException exc) {

      Console.WriteLine("Поток прерван, код завершения "

               + exc.ExceptionState);

    }

  }

}

class UseAltAbort {

  static void Main() {

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных