#c# #winforms #infinite-loop
#c# #winforms #бесконечный цикл
Вопрос:
Мой код состоит из чего-то вроде этого:
{
var comeback = Cursor.Position;
code goes here
code goes here
code goes here
code goes here
code goes here
code goes here
Cursor.Position = restart;
}
Теперь я хочу, чтобы это непрерывно повторялось до тех пор, пока я не вызову нажатие клавиши для остановки.
Чего я не могу сделать, так это написать код для этого цикла, или есть другой способ, которым я должен это сделать.
Заранее спасибо
Комментарии:
1. Я не понимаю. Вы спрашиваете, как написать бесконечный цикл на C #? Попробуйте
for(;;)
2. Будьте конкретны: консоль, winform, webform или wpf?
3. Да, я хочу, чтобы это был бесконечный цикл, для остановки которого будет событие нажатия клавиши
4. Теперь, когда мы знаем, что это приложение WinForms, вам не нужен бесконечный цикл в потоке пользовательского интерфейса. Это заблокирует ваше приложение и не позволит ему ни отвечать на вводимые пользователем данные, ни обновлять что-либо, отображаемое на экране.
5. Бесконечные циклы в приложении WinForm — ужасная идея: $
Ответ №1:
while(!Console.KeyAvailable)
{
//do work
}
Комментарии:
1. Поздняя информация («И это winform») делает недействительным этот ответ.
2. тем не менее, поскольку это хороший способ сделать это для консольных приложений, вы получаете от меня 1 (другие люди, ищущие «цикл нажатия клавиш», могут быть заинтересованы в вашем ответе)
Ответ №2:
поскольку OP поблагодарил меня за первый ответ, я сохраню это в качестве ссылки ниже..
рассмотрите возможность наличия фонового потока, который выполняет цикл. Затем добавьте прослушиватель ключей в свой проект (если у вас Visual Studio, откройте вкладку свойства и проверьте события), дважды щелкнув событие нажатия клавиш. Вы получите что-то вроде этого:
private bool keyPressed;
public MyClass() {
keyPressed = false;
Thread thread = new Thread(myLoop);
thread.Start();
}
private void myLoop() {
while (!keyPressed) {
// do work
}
}
private void MyClass_KeyPress(object sender, KeyPressEventArgs e) {
keyPressed = true;
}
}
Рассмотрите возможность создания потока, который прослушивает нажатие клавиши, а затем устанавливает флаг в вашей программе, который вы проверяете в своем цикле.
например, непроверенный
bool keyPressed = false;
...
void KeyPressed(){
Console.ReadKey();
keyPressed = true;
}
...
Thread t = new Thread(KeyPressed);
t.Start();
...
while (!keyPressed){
// your loop goes here
// or you can check the value of keyPressed while you're in your loop
if (keyPressed){
break;
}
...
}
Комментарии:
1. @Javed. да.. Я заметил добавленный комментарий.. Я думаю о том, как отредактировать свой ответ..
Ответ №3:
Имеют ЛОГИЧЕСКУЮ ПЕРЕМЕННУЮ.
например, bool flag = true; while(флаг) { ваш код; }
при нажатии клавиши измените флаг на false.
Комментарии:
1. Как вы предлагаете проверить нажатие клавиши??