Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Прерывание работы приложения по нажатию на клавишу


Автор: fleek 31.10.2010, 00:14
Я написал на C# консольную программку, выполняющую расчет динамики одной конструкции. Расчет длится около суток и мне бы хотелось дополнить программу кодом, который бы позволял остановить выполнение главного метода нажатием на клавишу esc. Нажатие на клавишу должно не просто закрыть приложение, а запустить другой метод, сохраняющий результат для последующего продолжения расчета. Можно ли это сделать в рамках консольного приложения? Если да то как?

Второй вопрос в принципе связан с первым, но но вызван более любопытством, чем необходимостью решить конкретную задачу. Есть тестовое оконное приложение с двумя кнопками. Кнопка "start" запускает цикл, кнопка "stop" прерывает его. Как правильно написать обработчик событий для кнопки "stop", чтобы нажатие на неё прерывало работу цикла, запущенного с кнопки "start"? В настоящее время кнопка "stop" откликается на нажатие только после того как закончится выполнение цикла, запущенного с кнопки "start".
Код

private void ButtonClick(object sender, EventArgs e)//общий обработчик для события Click для кнопок start и stop
{
   if (((Button)sender).Text == "start")
   {
      Label1.Text = "Нажата кнопка start";//метка отображающая факт нажатия на кнопку
      for (int i = 0; i < 100000; i++)//цикл, имитирующий длительную работу некоторого метода
      {
         Label2.Text = Convert.ToString(i);//по идее должны бежать цифры от 0 до 99999, но на самом деле через пару секунд сразу появляется 99999 
         if (((Button)sender).Text == "stop")//если нажата кнопка stop то цикл прерывается
         {
            Label1.Text = "Нажата кнопка pause";
            break;
         }
      }
   }
}


Спасибо за помощь.

Автор: Экскалупатор 31.10.2010, 00:56
fleek, запускай выполнение твоего расчета в отдельном потоке, а основное приложение ставь ждать нажатие кнопки(любой), при нажатии определяй какая была нажата и выполняй те действия которые тебе нужны.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)