Шрифт:
//Немедленно известить пользователя
//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 +
// " расчетов!");
}
Листинг 9.5. Код класса FindNextPrimeNumber.cs
using System;
public class FindNextPrimeNumber {
//Перечисляем возможные состояния
public enum ProcessingState {
notYetStarted,
waitingToStartAsync,
lookingForPrime,
foundPrime,
requestAbort,
aborted
}
long m_startPoint;
long m_NextHighestPrime;