> 'Состояние должно отвечать, что поиск продолжается
> setProcessingState(ProcessingState.waitingToStartAsync)
> newThread.Start()
>End Sub
>'-------------------------------------------------------------
>'Основной рабочий поток. Этот поток запускает поиск очередного
>'простого числа и выполняется до тех пор, пока не произойдет
>'одно из следующих двух событий:
>' (а) найдено очередное простое число
>' (b) от внешнего (по отношению к данному) потока поступила
>' команда прекратить выполнение
>'--------------------------------------------------------------
>Public Sub findNextHighestPrime()
> 'Если поступила команда прекратить выполнение, то поиск даже
> 'не должен начинаться
> If (m_processingState = ProcessingState.requestAbort) Then
> GoTo finished_looking
> End If
> 'Состояние должно отвечать, что поиск продолжается
> setProcessingState(ProcessingState.lookingForPrime)
> Dim currentItem As Long
> 'Проверить, является ли число нечетным
> If ((m_startPoint And 1) = 1) Then
> 'Число является нечетным, начать поиск со следующего нечетного числа
> currentItem = m_startPoint + 2
> Else
> 'Число является четным, начать поиск со следующего нечетного числа
> currentItem = m_startPoint + 1
> End If
> 'Приступить к поиску простого числа
> While (m_processingState = ProcessingState.lookingForPrime)
> 'B случае нахождения простого числа, возвратить его
> If (isItemPrime(currentItem) = True) Then
> m_NextHighestPrime = currentItem
> 'Обновить состояние
> setProcessingState(ProcessingState.foundPrime)
> End If
> currentItem = currentItem + 2
> End While
>finished_looking:
> 'Выход. К этому моменту либо от другого потока поступила
> 'команда прекратить поиск, либо было найдено и записано
> 'следующее наибольшее простое число
> 'Если поступил запрос прекратить выполнение,
> 'сообщить, что выполнение процесса прекращено
> If (m_processingState = ProcessingState.requestAbort) Then
> setProcessingState(ProcessingState.aborted)
> End If
>End Sub
>'Вспомогательная функция, которая проверяет, является
>'ли число простым
>Private Function isItemPrime(ByVal potentialPrime _
> As Long) As Boolean
> 'Если число - четное, значит, оно не является простым
> If ((potentialPrime And 1) = 0) Then
> Return False
> End If
> 'Продолжать поиск до тех пор, пока не будет превышено значение
> 'квадратного корня из числа
> Dim end_point_of_search As Long end_point_of_search = _
> CLng(System.Math.Sqrt(potentialPrime)) + 1
> Dim current_test_item As Long = 3
> While (current_test_item <= end_point_of_search)
> '---------------------------------------------------------
> 'Проверить, не поступила ли команда прекратить выполнение!