Пометьте свой обработчик нажатий Button1 с помощью async (перед пустым значением в типе возврата), затем await a Task , который вызывает WaitOne ():
private ManualResetEvent mre = new ManualResetEvent(false);
private async void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
for(int i = 1; i <=100; i++)
{
label1.Text = i.ToString();
await Task.Delay(100);
if (i % 10 == 0)
{
label2.Text = "Press Button2 to Continue";
await Task.Run(() => {
mre.WaitOne();
mre.Reset();
});
label2.Text = "";
}
}
button1.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
mre.Set();
}
Обратите внимание, что вы можете иметь несколько ожидающих внутри обработчика. Первый явно не нужен; это просто замедляет цикл, так что вы можете видеть изменение числа. Также обратите внимание, что вы можете изменить задержку до смехотворно большой суммы, и форма все равно останется отзывчивой!