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

Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа

Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа

'----------------------------------------------------------
'Код, обрабатывающий событие щелчка на кнопке Button1 формы
'Вызвать из этого потока функцию поиска простого числа!
'(Это приведет к блокированию потока)
'----------------------------------------------------------
Private Sub Button1_Click(ByVal senderAs System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
 Dim testItem As Long
 testItem = System.Convert.ToInt64("123456789012345")
 Dim nextPrimeFinder As FindNextPrimeNumber
 nextPrimeFinder = New FindNextPrimeNumber(testItem)
 nextPrimeFinder.findNextHighestPrime()
 Dim nextHighestPrime As Long
 nextHighestPrime = nextPrimeFinder.getPrime()
 MsgBox(CStr(nextHighestPrime))
 'Сколько времени заняли вычисления?
 Dim calculation_time As Integer
 calculationtime = nextPrimeFinder.getTickCountDelta()
 MsgBox(CStr(calculation time) + " мс")
End Sub
'------------------------------------------------------------------------
'Код, обрабатывающий событие щелчка на кнопке Button2 формы
'Вызвать функцию поиска простого числа из другого потока!
'(Данный поток блокироваться не будет)
'Для отслеживания состояния выполнения задачи используем конечный автомат
'------------------------------------------------------------------------
Private Sub Button2_Click(ByVal senderAs System.Object, _
 ByVal eAs System.EventArgs) Handles Button2.Click
 Dim testItem As Long
 testItem = System.Convert.ToInt64("123456789012345")
 Dim nextPrimeFinderAs FindNextPrimeNumber
 nextPrimeFinder = New FindNextPrimeNumber(testItem)
 '-----------------------------------
 'Выполнить обработку в другом потоке
 '-----------------------------------
 nextPrimeFinder.findNextHighestPrime_Async()
 'Войти в цикл и ожидать до тех пор, пока не будет найдено простое число
 'или выполнение не будет прекращено
 While ((nextPrimeFinder.getProcessingState() <> _
  FindNextPrimeNumber.ProcessingState.foundPrime) And _
  (nextPrimeFinder.getProcessingState() <> _
  FindNextPrimeNumber.ProcessingState.aborted))
  'ТОЛЬКО В ТЕСТОВОМ КОДЕ:
  'Отобразить окно сообщений и предоставить пользователю возможность
  'убрать его с экрана.
  'Это позволяет организовать паузу
  MsgBox("Поиск продолжается... Щелкните на кнопке OK")
  'Мы могли бы прекратить поиск путем следующего вызова функции:
  'nextPrimeFinder.setProcessingState(
  ' FindNextPrimeNumber.ProcessingState.requestAbort)
 End While
 'Осуществить корректный выход в случае прекращения поиска
 If (nextPrimeFinder.getProcessingState() = _
  FindNextPrimeNumber.ProcessingState.aborted) Then
  MsgBox("Поиск прекращен!")
  Return
 End If
 Dim nextHighestPrime As Long
 nextHighestPrime = nextPrimeFinder.getPrime()
 MsgBox(CStr(nextHighestPrime))
 'Сколько времени заняли вычисления?
 Dim calculation_time As Integer
 calculation_time = nextPrimeFinder.getTickCountDelta()
 MsgBox(CStr(calculation_time) + " мс")
End Sub
 

Оглавление книги


Генерация: 1.089. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз