Чтение онлайн

на главную - закладки

Жанры

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

Салмре Иво

Шрифт:

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

//запрос на прекращение выполнения

m_CallFunction(this);

//Если выполнение не было отменено, изменить состояние таким образом,

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

if (m_processingState != ProcessingState.aborted) {

//Обозначить
завершение выполнения

setProcessingState(ProcessingState.done);

}

//Выйти из потока...

 }

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

 //Конечный автомат

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

 public void setProcessingState(ProcessingState nextState) {

//B любой момент времени только одному потоку выполнения

//могут быть разрешены попытки изменить состояние

lock(m_useForStateMachineLock) {

//B случае попытки повторного вхождения в текущее состояние

//никакие дополнительные действия не выполняются

if (m_processingState == nextState) {

return;

}

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

//Простейший защитный код, гарантирующий

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

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

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

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;

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

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

Учитель из прошлого тысячелетия

Еслер Андрей
6. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Учитель из прошлого тысячелетия

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Неучтенный элемент. Том 6

NikL
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 6

Газлайтер. Том 19

Володин Григорий Григорьевич
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 19

Наномашины, звереныш! Том 5

Новиков Николай Васильевич
5. Первый среди карапузов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наномашины, звереныш! Том 5

Портрет дьявола: Собрание мистических рассказов

Скотт Вальтер
Проза:
классическая проза
8.09
рейтинг книги
Портрет дьявола: Собрание мистических рассказов

Ну, здравствуй, Герой!

Француз Михаил
2. Здравствуй, Мир!
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Ну, здравствуй, Герой!

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Третий Генерал: Том IX

Зот Бакалавр
8. Третий Генерал
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Третий Генерал: Том IX

Слово мастера

Лисина Александра
11. Гибрид
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Слово мастера

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7