...
public static void keypressed = 0;
private void button1_Click(object sender, EventArgs e)
{
while (keypressed != 1)
{
a = a;
}
this.close();
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
keypressed = 1;
}
...
Проблема с отловом нажатия кнопки.
Код:
Т.е форма должна закрытся как только я нажму кнопку, но после того как прога уходит в условно-бесконечный цикл, она перестает отлавливать нажатие кнопки. Что делать?
Код:
...
public static void keypressed = 0;
private bool flag = false;
private void button1_Click(object sender, EventArgs e)
{
flag = true;
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
keypressed = 1;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (fl && keypressed == 1)
this.Close();
}
...
public static void keypressed = 0;
private bool flag = false;
private void button1_Click(object sender, EventArgs e)
{
flag = true;
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
keypressed = 1;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (fl && keypressed == 1)
this.Close();
}
...
Так дело в том что цикл запускающийся по button1_click обязательно должен выполнятся все время, в нем весь смысл (в реальной проге там ведь не a=a), но пока он выполняется форма не реагирует на KeyPress. Нужно чтобы реагировала с запущеным циклом..
Ответ прост, вызывай в своём цикле Application.DoEvents().
How to: Run an Operation in the Background
Дословно:
Если у вас есть код, который должен выполняться длительное время и вы не хотите, чтобы на это время ваш интерфейс продолжал работать, то используйте BackgroundWorker для запуска этого кода в отдельном потоке.
Код в примере MSDN показывает, как запускается трудоемкая операция на заднем фоне. Форма имеет кнопки Старт и Канцел. Нажатие кнопки Старт запускает эту трудоемкую операцию в отдельном асинхронном потоке. При этом интерфейс приложения продолжает реагировать на события пользователя и нажатие кнопки Канцел приводит к остановке этого процесса.
Я это применял в своем приложении, все реально работает, пример в MSDN самодостаточен, чтобы полностью разобраться.
К сожалению, я не помню, но вроде бы я эту статью видел на русском MSDN (не буду врать не помню).