Программирование мобильных устройств на платформе .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("Недопустимое изменение состояния")
Поделиться:
Популярные книги
Пески времени
Детективы:
триллеры
9.02
рейтинг книги
Родословная. Том 5
5. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Я все еще князь. Книга XXI
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гром Раскатного. Том 1
1. Штормовой Предел
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Императора VI
6. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 9
9. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Поход
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Темный Лекарь 9
9. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
История Шотландии с древнейших времен до флодденского сражения 1513 года.
Научно-образовательная:
история
5.00
рейтинг книги
Кодекс Охотника. Книга XVII
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
И в аду есть герои
5. Тайный Город
Фантастика:
боевая фантастика
9.19
рейтинг книги
Наномашины, наследник! Том 9
9. Первый среди карапузов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 12
12. Антимаг. Вне системы
Фантастика:
фэнтези
5.00