Вход/Регистрация
Программирование мобильных устройств на платформе .NET Compact Framework
вернуться

Салмре Иво

Шрифт:

//невозможность перехода в другое состояние, если задача

//либо успешно завершена, либо успешно отменена

//------------------------------------------------------

if ((m_processingState == ProcessingState.aborted) ||

(m_processingState == ProcessingState.done)) {

return;

}

//Убедиться в допустимости данного изменения состояния

switch (nextState) {

case ProcessingState.notYetStarted:

throw new Exception("Переход в состояние 'notYetStarted' невозможен");

case ProcessingState.waitingToStartAsync:

if (m_processingState != ProcessingState.notYetStarted) {

throw new Exception("Недопустимое изменение состояния");

}

break;

case ProcessingState.running:

if (m_processingState != ProcessingState.waitingToStartAsync) {

throw new Exception("Недопустимое изменение состояния");

}

break;

case ProcessingState.done:

//Мы можем завершить работу лишь тогда, когда она выполняется.

//Это возможно также в тех случаях, когда пользователь затребовал

//отмену выполнения, но работа к этому моменту уже была закончена

if ((m_processingState != ProcessingState.running) &&

(m_processingState != ProcessingState.requestAbort)) {

throw new Exception("Недопустимое изменение состояния");

}

break;

case ProcessingState.aborted:

if (m_processingState != ProcessingState.requestAbort) {

throw new Exception("Недопустимое изменение состояния");

}

break;

}

//Разрешить изменение состояния

m_processingState = nextState;

}

}

public ProcessingState State {

get {

ProcessingState currentState;

//Предотвратить попытки одновременного чтения/записи состояния

lock(m_useForStateMachineLock) {

currentState = m_processingState;

}

return currentState;

}

}

} //Конец класса

В листинге 9.2 представлен код, имитирующий выполнение работы фоновым потоком. Когда фоновый поток начинает выполнять код, на экране отображается окно сообщения. Выполнение работы имитируется созданием серии пауз длительностью в одну треть секунды, в промежутках между которыми рабочий код проверяет, не поступил ли от другого потока запрос на прекращение выполнения.

Листинг 9.2. Тестовая программа для выполнения работы в фоновом потоке

using System;

//-------------------------------------------------

//Тестовый код, который используется для выполнения

//фоновым потоком

//-------------------------------------------------

public class Test1 {

public int m_loopX;

//------------------------------------------------------------------

//Функция, вызываемая фоновым потоком

// [in] threadExecute: Класс, управляющий выполнением нашего потока.

// Мы можем контролировать его для проверки

// того, не следует ли прекратить вычисления

//------------------------------------------------------------------

public void ThreadEntryPoint(ThreadExecuteTask threadExecute) {

//Это окно сообщений будет отображаться в контексте того потока,

  • Читать дальше
  • 1
  • ...
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: