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 готовности прекратить выполнение...
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) + ". " + _