> 'Не делать ничего, если вычисления не выполняются
> 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