Mam pytanie dotyczące zapętlenia z kliknięciem przycisku Zdarzenie, próbowałem wielu metod. & przeszukałem wiele stron w poszukiwaniu prostej odpowiedzi na ostatnią godzinę, ale prawda jest każdą odpowiedzią po prostu wygląda jak obcy kod, prawdopodobnie dlatego, że wciąż jestem nowy w rozwoju.Przerywanie z pętli za pomocą kliknięcia przycisku - C#
Oto uproszczona wersja tego, co próbuję zrobić:
private string Message = "Hello";
private void Spam(bool loop)
{
if(loop == true)
{
while (loop == true)
{
MessageBox.Show(Message);
}
} else { MessageBox.Show("Spamming has stopped !! "); }
}
private void button1_Click(object sender, EventArgs e)
{
Spam(true);
}
private void button2_Click(object sender, EventArgs e)
{
Spam(false);
}
Oczywiście nie jest to mój API, lub byłoby bezużyteczne rzeczy wymyślić, jednak sam kod jest długa & chłopaki zawsze pytają o "odpowiedni kod" (brak szacunku), więc tak jest.
Mój problem: Wyłamując się z pętli spamu po kliknięciu przycisku 2, kod dla mnie wygląda na dość przyzwoity, aby API mógł to zrozumieć, ale za każdym razem, gdy kliknięto przycisk 1, API zawiesił się.
Nie jest to możliwe w przypadku pojedynczego wątku. Można to zrobić, jeśli używasz co najmniej dwóch wątków - jednego, który wykonuje zadanie w tle ("pętla"), i drugiego, które przetwarza zdarzenia kliknięcia użytkownika, I zasoby współużytkowane przez te dwa wątki (jak, 'static bool' dla C#) – Lanorkin
nie musisz wywoływać Spamu (Hi, false) w drugim przycisku, łatwo zdefiniować globalną zmienną zwaną w BreakLoop domyślnie = false, a kiedy klikniesz pierwszy przycisk, zmień jego wartość na false, a Ty podczas pętli sprawdź czy ta zmienna jest nadal prawdziwa, a następnie kontynuuj, a kiedy klikniesz drugi przycisk, ustaw tę zmienną na wartość true, przez co przerwiesz pętlę – Monah
Wy, ludzie zachowujący się tak, jakbyś nie mówił Alien? czy robisz to celowo? -_-. x – Hellooo123