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

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

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

//------------------------------------------------------
//Весь этот код должен находиться внутри класса Form1.cs
//------------------------------------------------------
//Объект, который будет выполнять все фоновые вычисления
FindNextPrimeNumber m_findNextPrimeNumber;
//--------------------------------------------
//Обновить текст, информирующий о состоянии...
//--------------------------------------------
void setCalculationStatusText(string text) {
 label1.Text = text;
}
//-------------------------------------
//Пункт меню для "выхода" из приложения
//-------------------------------------
private void menuItemExit_Click(object sender, System.EventArgs e) {
 this.Close();
}
//----------------------------------------
//Пункт меню для начала фоновых вычислений
//----------------------------------------
private void menuItemStart_Click(object sender, System.EventArgs e) {
 //Число, с которого мы хотим начать поиск
 long startNumber = System.Convert.ToInt64(textBox1.Text);
 //Установить фоновое выполнение
 m_findNextPrimeNumber = new FindNextPrimeNumber(startNumber);
 //Запустить выполнение задачи в фоновом режиме
 m_findNextPrimeNumber.findNextHighestPrime_Async();
 //Установить таймер, используемый для контроля длительности вычислений
 timer1.Interval = 400;
 //400 мс timer1.Enabled = true;
}
//--------------------------------------------
//Пункт меню для "отмены" выполняющейся задачи
//--------------------------------------------
private void menuItemAbort_Click(object sender, System.EventArgs e) {
 //He делать ничего, если вычисления не выполняются
 if (m_findNextPrimeNumber == null) return;
 //Установить поток в состояние прекращения выполнения
 m_findNextPrimeNumber.setProcessingState(FindNextPrimeNumber.ProcessingState.reguestAbort);
 //Немедленно известить пользователя
 //o готовности прекратить выполнение...
 setCalculationStatusText("Waiting to abort...");
 // setCalculationStatusText("Ожидание прекращения выполнения...");
}
//-------------------------------------------------------------
//Этот таймер, вызываемый потоком пользовательского интерфейса,
//позволяет отслеживать состояние выполнения
//фоновых вычислений
//-------------------------------------------------------------
private void timer1_Tick(object sender, System.EventArgs e) {
 //Если к моменту вызова искомое простое число еще
 //не было найдено, отключить таймер
 if (m_findNextPrimeNumber == null) {
  timer1.Enabled =false;
  return;
 }
 //-------------------------------------------------
 //Если выполнение было отменено, освободить объект,
 //осуществляющий поиск, и выключить таймер
 //-------------------------------------------------
 if (m_findNextPrimeNumber.getProcessingState ==
     FindNextPrimeNumber.ProcessingState.aborted) {
  timer1.Enabled = false;
  m_findNextPrimeNumber = null;
 setCalculationStatusText("Prime search aborted");
  // setCalculationStatusText("поиск простого числа отменен");
  return;
 }
 //----------------------------------
 //Удалось ли найти правильный ответ?
 //----------------------------------
 if (m_findNextPrimeNumber.getProcessingState ==
     FindNextPrimeNumber.ProcessingState.foundPrime) {
  timer1.Enabled = false;
  //Отобразить результат
  setCalculationStatusText("Found! Next Prime = " + m_findNextPrimeNumber.getPrime().ToString());
  // setCalculationStatusText("Чиcлo найдено! Следующее простое число = " +
  // m_findNextPrimeNumber.getPrime().ToString());
  m_findNextPrimeNumber = null;
  return;
 }
 //--------------------------------------
 //Вычисления продолжаются. Информировать
 //пользователя о состоянии выполнения
 //--------------------------------------
 //Получить два выходных значения
 long numberCalculationsToFar;
 long currentItem;
 m_findNextPrimeNumber.getExecutionProgressInfo(out numberCalculationsToFar,out currentItem);
 setCalculationStatusText("In progress. Looking at: " +
  currentItem.ToString() + ". " +
  numberCalculationsToFar.ToString() +
  " calculations done for you so far!");
 // setCalculationStatusText("Вычисления продолжаются. Поиск в области: " +
 // currentItem.ToString() + ". " +
 // "Для вас выполнено " +
 // numberCalculationsToFar.ToString() +
 // " расчетов!");
}

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


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