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

Листинг 9.4. Код, который должен быть помещен в класс Smartphone Form1.cs

Листинг 9.4. Код, который должен быть помещен в класс Smartphone Form1.cs

'------------------------------------------------------
'Весь этот код должен находиться внутри класса Form1.cs
'------------------------------------------------------
'Объект, который будет выполнять все фоновые вычисления
Private m_findNextPrimeNumber As FindNextPrimeNumber
'--------------------------------------------
'Обновить текст, информирующий о состоянии...
'--------------------------------------------
Sub setCalculationStatusText(ByVal text As String)
 Label1.Text = text
End Sub
Private Sub menuItemExit_Click(ByVal sender As _
 System.Object, ByVal e As System.EventArgs) _
 Handles menuItemExit.Click
 Me.Close()
End Sub
'----------------------------------------
'Пункт меню для начала фоновых вычислений
'----------------------------------------
Private Sub menuItemStart Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) _
 Handles menuItemStart.Click
 'Число, с которого мы хотим начать поиск
 Dim startNumber As Long = System.Convert.ToInt64(TextBox1.Text)
 'Установить фоновое выполнение
 m_findNextPrimeNumber = New FindNextPrimeNumber(startNumber)
 'Запустить выполнение задачи в фоновом режиме...
 m_findNextPrimeNumber.findNextHighestPrime_Async()
 'Установить таймер, используемый для контроля длительности вычислений
 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) + ". " + _
  "Для вас выполнено " + CStr(numberCalculationsToFar) + _
  " расчетов!")
End Sub

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


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