Ответ Windows.Forms
Наименее сложный метод заключается в следующем:
private bool m_stop;
private void button1_Click (object s, EventArgs ea)
{
try
{
// Don't forget to disable all controls except the ones you want a user to be able to click while your method executes.
toGet = textbox1.Text;
got = 0;
while (got <= toGet)
{
Application.DoEvents ();
// DoEvents lets other events fire. When they are done, resume.
if (m_stop)
break;
//DoStuff
}
finally
{
// Enable the controls you disabled before.
}
}
private void button2_Click (object s, EventArgs ea)
{
m_stop = true;
}
Он имеет явное преимущество, позволяя вам выполнять button1_Click в потоке пользовательского интерфейса,все еще позволяет интерфейсу реагировать на вашу кнопку остановки.
У него есть недостаток, который вы должны защитить от повторного входа.Что произойдет, если они нажмут на кнопку button1, когда button1_click уже выполняет!?!?
Редактировать: Другой способ, который я использовал, - использовать таймер вместо цикла.Затем метод stop просто останавливает таймер.