Я пытаюсь сделать очень простой автокликер на C#, чтобы поправиться.Нарушение цикла while и сна
У меня есть форма с двумя числовыми текстовыми полями и двумя кнопками. В первом текстовом поле указывается, сколько времени должно быть между каждым кликом (в msec), а во втором текстовом поле указывается количество итераций.
Первая кнопка у меня есть button1
, которая по сути только запускает программу. У меня есть вторая кнопка: button2
, которая остановит функцию button1_Click
.
Вот что у меня есть:
private void button1_Click(object sender, EventArgs e)
{
//While a is less than number of specified iterations
for (int a = 0; a < Convert.ToInt32(numericUpDown2.Value); a++)
{
//Sleep for desired time
System.Threading.Thread.Sleep(Convert.ToInt32(numericUpDown1.Value));
//Get x/y coordinates of mouse
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
//Click mouse at x/y coordinates
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
}
public void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
Моя проблема заключается в том, что моя программа застревает в том, что цикл, и у меня нет никакого способа сломать функцию button1_Click
.
Я хочу, чтобы, если я нажму F11 или мою кнопку button2
, функция button1_Click
немедленно остановится, но сама форма все равно будет открыта. Прямо сейчас я просто использую ключ ESC
просто для простоты.
спишь нить UI так приложение * будет * перестает отвечать на запросы. Вам нужно взглянуть на использование правильного таймера. – ChrisF
В WPF/C# вы можете использовать RepeatButton, как описано здесь: https://msdn.microsoft.com/en-us/library/ms750603(v=vs.85).aspx –
Не могли бы вы просто сделать цикл while в одной кнопке то есть, пока кнопка 2 не активирована? – Jacobr365