Экстренная остановка работы приложения по кнопке - C#
Формулировка задачи:
Есть программа, в которой рисуется анимация c помощью PictureBox.
Есть внутри цикл, который как раз-таки и отвечает за эту "анимацию".
Мне нужно, чтобы данный цикл прерывался по нажатию кнопки.
Если просто реализовать кнопку закрытия (как сделал я)
То цикл сначала завершиться естественным путем (пройдет все i до 1000), а только потом уже выполнит команду кнопки. А мне хотелось бы реализовать безусловное прерывание. Думал о том, чтобы использовать оператор условия, который проверяет была ли нажата кнопка "Stop" внутри самого цикла, но так и не понял как реализовать сие. Да и как-то затратненько около тысячи раз проверять нажатие кнопки. Есть ли какое-либо элегантное решение?
p.s. с C# только-только начал знакомиться. Не ругайтесь сильно на неумеху.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace risunki_1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void Start_Click(object sender, EventArgs e)
{
Random rand = new Random();
Graphics g = pictureBox1.CreateGraphics();
for (int cikl = 0; cikl < 1000; cikl++)
{
System.Threading.Thread.Sleep(3);
for (int i = 0; i < 10; i++)
{
int s = rand.Next(1, 50);
int j = rand.Next(1, 20);
int z = rand.Next(1, 10);
//g.DrawLine(new Pen(Brushes.Red, 4), new Point(10, 10), new Point(100, 100));
g.DrawRectangle(Pens.Red, 10 * s, 10 * j, 50, 50);
g.FillEllipse(Brushes.WhiteSmoke, 10*s, 10*j, 50, 50);
}
}
}
private void Clear_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;
}
private void STOP_Click(object sender, EventArgs e)
{
this.Close();
}
}
} for (int cikl = 0; cikl < 1000; cikl++)
{
System.Threading.Thread.Sleep(3);
for (int i = 0; i < 10; i++)
{
int s = rand.Next(1, 50);
int j = rand.Next(1, 20);
int z = rand.Next(1, 10);
//g.DrawLine(new Pen(Brushes.Red, 4), new Point(10, 10), new Point(100, 100));
g.DrawRectangle(Pens.Red, 10 * s, 10 * j, 50, 50);
g.FillEllipse(Brushes.WhiteSmoke, 10*s, 10*j, 50, 50);
}
} private void STOP_Click(object sender, EventArgs e)
{
this.Close();
}Решение задачи: «Экстренная остановка работы приложения по кнопке»
textual
Листинг программы
private void STOP_Click(object sender, EventArgs e)
{
flag = true;
this.Close();
}