Цикл C # и цикл прерывания нажатия клавиши

#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. Как вы предлагаете проверить нажатие клавиши??