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

Салмре Иво

Шрифт:

(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) {

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

//в котором выполняется задача

System.Windows.Forms.MessageBox.Show("Выполнение ТЕСТОВОГО ПОТОКА");

//------

//60 раз

//------

for (m_loopX = 0; m_loopX < 60; m_loopX++) {

//Если затребована отмена выполнения, мы должны завершить задачу

if (threadExecute.State == ThreadExecuteTask.ProcessingState.requestAbort) {

threadExecute.setProcessingState(ThreadExecuteTask.ProcessingState.aborted);

return;

}

//Имитировать выполнение работы: пауза 1/3 секунды

System.Threading.Thread.Sleep(333);

}

 }

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

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

Листинг 9.3. Код для запуска и тестирования приведенного выше тестового кода

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

private ThreadExecuteTask m_threadExecute;

//Класс, метод которого мы хотим выполнять в асинхронном режиме

Test1 m_testMe;

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

//Этот код должен быть запущен ранее другого кода, поскольку

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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