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

ЖАНРЫ

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

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

'новый поток выполнения!

'

'Создать новый поток и обеспечить его выполнение

'-----------------------------------------------------------------------

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)

End Sub

'Проверить состояние выполнения

Private Sub buttonCheckStatus_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles ButtonCheckStatus.Click

'Запросить у класса управления потоком, в каком состоянии он находится

MsgBox(m_threadExecute.State.ToString)

'Запросить класс, метод которого выполняется в потоке,

'o состоянии выполнения

MsgBox(m_testMe.m_loopX.ToString)

End Sub

Листинг 9.4. Код, который должен быть помещен в класс Smartphone Form1.cs

'------------------------------------------------------

'Весь этот код должен находиться внутри класса Form1.cs

'------------------------------------------------------

'Объект, который будет выполнять все фоновые вычисления

Private m_findNextPrimeNumber As FindNextPrimeNumber

'--------------------------------------------

'Обновить текст, информирующий о состоянии...

'--------------------------------------------

Sub setCalculationStatusText(ByVal text As String)

Label1.Text = text

End Sub

Private Sub menuItemExit_Click(ByVal sender As _

System.Object, ByVal e As System.EventArgs) _

Handles menuItemExit.Click

Me.Close

End Sub

'----------------------------------------

'Пункт меню для начала фоновых вычислений

'----------------------------------------

Private Sub menuItemStart Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles menuItemStart.Click

'Число, с которого мы хотим начать поиск

Dim startNumber As Long = System.Convert.ToInt64(TextBox1.Text)

'Установить фоновое выполнение

m_findNextPrimeNumber = New FindNextPrimeNumber(startNumber)

'Запустить выполнение задачи в фоновом режиме...

m_findNextPrimeNumber.findNextHighestPrime_Async

'Установить таймер, используемый для контроля длительности вычислений

Timer1.Interval = 400 '400 мс

Timer1.Enabled = True

End Sub

'--------------------------------------------

'Пункт меню для "отмены" выполняющейся задачи

'--------------------------------------------

Private Sub menuItemAbortClick(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles menuItemAbort.Click

'Не делать ничего, если вычисления не выполняются

If (m_findNextPrimeNumber Is Nothing) Then Return

'Установить поток в состояние прекращения выполнения

m_findNextPrimeNumber.setProcessingState( _

FindNextPrimeNumber.ProcessingState.requestAbort)

'Немедленно известить пользователя 'o готовности прекратить выполнение...

Поделиться с друзьями: