Шрифт:
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;