Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
End If
End Select
'Разрешить изменение состояния
m_processingState = nextState
End SyncLock
End Sub
Public ReadOnly Property State As ProcessingState
Get
Dim currentState As ProcessingState
'Предотвратить попытки
одновременного чтения/записи состояния
SyncLock (m_useForStateMachineLock)
currentState = m_orocessingState
End SyncLock
Return currentState
End Get
End Property
End Class
Листинг 9.2. Тестовая программа для выполнения работы в фоновом потоке
Option Strict On
Imports System
'---------------------------------------------------------
'Тестовый код, который используется для выполнения фоновым
'потоком
'---------------------------------------------------------
Public Class Test1
Public m_loopX As Integer
'------------------------------------------------------------------
'Функция, вызываемая фоновым потоком
' [in] threadExecute: Класс, управляющий выполнением нашего потока.
' Мы можем контролировать его для проверки
' того, не следует ли прекратить вычисления
'------------------------------------------------------------------
Public Sub ThreadEntryPoint(ByVal threadExecute As _
ThreadExecuteTask)
'Это окно сообщений будет отображаться в контексте того потока,
'в котором выполняется задача MsgBox("Выполнение ТЕСТОВОГО ПОТОКА")
'-------
' 60 раз
'-------
For m_loopX = 1 To 60
'Если затребована отмена выполнения, мы должны завершить задачу
If (threadExecute.State = _
ThreadExecuteTask.ProcessingState.requestAbort) Then
threadExecute.setProcessingState( _
ThreadExecuteTask.ProcessingState.aborted)
Return
End If
'Имитировать выполнение работы: пауза 1/3 секунды
System.Threading.Thread.Sleep(333)
Next
End Sub
End Class
Листинг 9.3.
Код для запуска и тестирования приведенного выше тестового кода
'Класс, который будет управлять выполнением нового потока
Private m_threadExecute As ThreadExecuteTask
'Класс, метод которого мы хотим выполнять в асинхронном режиме
Private m_testMe As Test1
'-----------------------------------------------------------------------
'Этот код должен быть запущен ранее другого кода, поскольку он запускает
'новый поток выполнения!
'
'Создать новый поток и обеспечить его выполнение
'-----------------------------------------------------------------------
Private Sub buttonStartAsyncExecution_Click(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles buttonStartAsyncExecution.Click
'Создать экземпляр класса, метод которого мы хотим вызвать
'в другом потоке
m_testMe = New Test1
'Упаковать точку входа метода класса в делегат
Dim delegateCallCode As _
ThreadExecuteTask.ExecuteMeOnAnotherThread
delegateCallCode = _
New ThreadExecuteTask.ExecuteMeOnAnotherThread(AddressOf _
m_testMe.ThreadEntryPoint)
'Дать команду начать выполнение потока!
m_threadExecute = New ThreadExecuteTask(delegateCallCode)
End Sub
'Принудительно вызвать запрещенное изменение состояния (это приведет
'к возбуждению исключения)
Private Sub buttonCauseException_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles buttonCauseException.Click
m_threadExecute.setProcessingState( _
ThreadExecuteTask.ProcessingState.notYetStarted)
End Sub
'Послать асинхронному коду запрос с требованием отмены его выполнения
Private Sub buttonAbort_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles buttonAbort.Click
m_threadExecute.setProcessingState( _
ThreadExecuteTask.ProcessingState.requestAbort)
Поделиться:
Популярные книги
Возрождение Феникса. Том 2
2. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.92
рейтинг книги
Вперед в прошлое 3
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сумеречный Стрелок 4
4. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аномалия
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Диверсант
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Кодекс Охотника. Книга XVI
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Дело Чести
5. Жизни Архимага
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Граф
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Я Гордый часть 2
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Начальник милиции 2
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 10
10. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 11
11. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Адепт. Том 1. Обучение
6. Совсем не герой
Фантастика:
фэнтези
9.27