C#:如何在单击按钮之前停止程序



我通过单击Button1启动程序循环。循环在Button1的 Click-Event-Handler 中执行。

我的要求:

循环应每次在代码中的某个点停止,并等待按下 Button2 后再继续执行。

我试过了:

private ManualResetEvent mre = new ManualResetEvent(false);

在我的Button1事件处理程序中:

mre.WaitOne();

在我的 Button2 事件处理程序中:

mre.Set();
mre.Reset();

。但是当我在Button1-Event-Handler中达到WaitOne()时,我的所有应用程序都冻结了。你对我有什么暗示吗,我做错了什么?

用异步标记 Button1 单击处理程序(在返回类型中的 void 之前),然后等待调用 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();
}

请注意,处理程序中可以有多个等待。 第一个显然没有必要;它只是减慢了循环速度,因此您可以看到数字的变化。 另请注意,您可以将延迟更改为非常长的金额,并且表单仍将保持响应!

相关内容

  • 没有找到相关文章

最新更新