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

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

> If (m_findNextPrimeNumber Is Nothing) Then Return

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

> m_findNextPrimeNumber.setProcessingState( _

>  FindNextPrimeNumber.ProcessingState.requestAbort)

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

> setCalculationStatusText("Ожидание прекращения выполнения...")

>End Sub


>'--------------------------------------------------------------

>'Этот таймер, вызываемый потоком пользовательского интерфейса,

>'позволяет отслеживать состояние выполнения 'фоновых вычислений

>'--------------------------------------------------------------

>Private Sub Timer1_Tick(ByVal sender As System.Object, _

> ByVal e As System.EventArgs) Handles Timer1.Tick

> 'Если к моменту вызова искомое простое число еще

> 'не было найдено, отключить таймер

> If (m_findNextPrimeNumber Is Nothing) Then

>  Timer1.Enabled = False

>  Return

> End If


> '-------------------------------------------------

> 'Если выполнение было отменено, освободить объект,

> 'осуществляющий поиск, и выключить таймер

> '-------------------------------------------------

> If (m_findNextPrimeNumber.getProcessingState = _

>  FindNextPrimeNumber.ProcessingState.aborted) Then

>  Timer1.Enabled = False

>  m_findNextPrimeNumber = Nothing

>  setCalculationStatusText("Поиск простого числа отменен")

>  Return

> End If


> '----------------------------------

> 'Удалось ли найти правильный ответ?

> '----------------------------------

> If (m_findNextPrimeNumber.getProcessingState = _

>  FindNextPrimeNumber.ProcessingState.foundPrime) Then

>  Timer1.Enabled = False


>  'Отобразить результат

>  setCalculationStatusText("Число найдено! Следующее простое число = " + _

>   m_findNextPrimeNumber.getPrime().ToString())

>  m_findNextPrimeNumber = Nothing

>  Return

> End If


> '--------------------------------------

> 'Вычисления продолжаются. Информировать

> 'пользователя о состоянии выполнения...

> '--------------------------------------

> 'Получить два выходных значения

> Dim numberCalculationsToFar As Long

> Dim currentItem As Long

> m_findNextPrimeNumber.getExecutionProgressInfo( _

>  numberCalculationsToFar, currentItem)

> setCalculationStatusText("Вычисления продолжаются. Поиск в области: " + _

>  CStr(currentItem) + ". " + _

>  "Для вас выполнено " + CStr(numberCalculationsToFar) + _

>  " расчетов!")

>End Sub

Листинг 9.5. Код класса FindNextPrimeNumber.cs

>Option Strict On

>Imports System

>Public Class FindNextPrimeNumber

>'Перечисляем возможные состояния

>Public Enum ProcessingState

> notYetStarted

> waitingToStartAsync

> lookingForPrime