Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
'----------------------------------------------------------
'Создать новый поток и вызвать в нем функцию на выполнение:
' this.ThreadStartPoint
'----------------------------------------------------------
Dim threadStart As System.Threading.ThreadStart threadStart = _
New System.Threading.ThreadStart(AddressOf ThreadStartPoint)
Dim newThread As System.Threading.Thread
newThread = New System.Threading.Thread(threadStart)
'Обозначить готовность к началу выполнения (в целях определенности
'это важно сделать еще до того, как будет запущен поток!)
setProcessingState(ProcessingState.waitingToStartAsync)
'Дать ОС команду начать выполнение нового потока в асинхронном режиме
newThread.Start
'Возвратить управление функции, вызывающей этот поток
End Sub
'-------------------------------------------------
'Эта функция является точкой входа, вызываемой для
'выполнения в новом потоке
'-------------------------------------------------
Private Sub ThreadStartPoint
'Установить состояние обработки, соответствующее выполнению
'функции в новом потоке!
setProcessingState(ProcessingState.running)
'Запустить на выполнение пользовательский код и передать указатель в наш
'класс, чтобы этот код мог периодически проверять, не поступил ли запрос
'на прекращение выполнения
m_CallFunction (Me)
'Если выполнение не было отменено, изменить состояние таким образом,
'чтобы оно соответствовало успешному завершению
If (m_processingState <> ProcessingState.aborted) Then
'Обозначить завершение выполнения
setProcessingState(ProcessingState.done)
End If
'Выйти из потока...
End Sub
'----------------
'Конечный автомат
'----------------
Public Sub setProcessingState(ByVal nextState As _
ProcessingState)
'В любой момент времени только одному потоку выполнения могут быть
'разрешены попытки изменить состояние
SyncLock (m_useForStateMachineLock)
'В случае попытки повторного вхождения в текущее состояние
'никакие дополнительные действия не выполняются
If (m_processingState = nextState) Then
Return
End If
'-----------------------------------------------------------
'Простейший защитный код, гарантирующий
'невозможность перехода в другое состояние, если задача либо
'успешно завершена, либо успешно отменена
'-----------------------------------------------------------
If ((m_processingState = ProcessingState.aborted) OrElse _
(m_processingState = ProcessingState.done)) Then
Return
End If
'Убедиться в допустимости данного изменения состояния
Select Case (nextState)
Case ProcessingState.notYetStarted
Throw New Exception _
("Переход в состояние 'notYetStarted' невозможен")
Case ProcessingState.waitingToStartAsync
If (m_processingState <> ProcessingState.notYetStarted) Then
Throw New Exception("Недопустимое изменение состояния")
End If
Case ProcessingState.running
If (m_processingState <> _
ProcessingState.waitingToStartAsync) Then
Throw New Ехсерtion("Недопустимое изменение состояния")
End If
Case ProcessingState.done
'Мы можем завершить работу лишь тогда, когда она выполняется.
'Это возможно также в тех случаях, когда пользователь затребовал
'отмену выполнения, но работа к этому моменту уже была закончена
If ((m_processingState <> ProcessingState.running) AndAlso _
(m_processingState <> ProcessingState.requestAbort)) Then
Throw New Exception("Недопустимое изменение состояния")
End If
Case ProcessingState.aborted
If (m_processingState <> ProcessingState.requestAbort) Then
Throw New Exception("Недопустимое изменение состояния")
Поделиться:
Популярные книги
Играть... в тебя
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Каратила
Детективы:
боевики
6.50
рейтинг книги
Герой
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Артефактор. Возвращение блудного императора
2. Артефактор
Фантастика:
фэнтези
боевая фантастика
4.33
рейтинг книги
Травник
1. Травник
Фантастика:
фэнтези
5.00
рейтинг книги
Сын счастья
2. Книга Дины
Проза:
современная проза
5.00
рейтинг книги
Некромант
4. Петр Синельников
Фантастика:
боевая фантастика
6.20
рейтинг книги
Купеческая дочь замуж не желает
Фантастика:
фэнтези
6.89
рейтинг книги
Газлайтер. Том 5
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Травница Его Драконейшества
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Родословная. Том 1
1. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Любовь Носорога
Любовные романы:
современные любовные романы
9.11
рейтинг книги
Геном хищника. Книга седьмая
7. Я - Легенда!
Фантастика:
боевая фантастика
рпг
фэнтези
попаданцы
5.00
рейтинг книги
Орленев
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00