C# 暂停循环,单击按钮后继续

本文关键字:按钮 继续 单击 暂停 循环 | 更新日期: 2023-09-27 17:57:04

我有一个在初始化组件之后调用的方法,方法签名是这样的:

public async void method_name ()
{
    // code ...
}

在该方法中,我有一个运行 4 个不同 if 语句的循环。我需要循环在每个 if 语句处暂停并等待用户按下按钮。因为按下该按钮将添加信息和内容。按下按钮后,我希望循环继续,当然在下一个 if 语句处暂停。

我想过像await Task.Delay(30000);那样做,但是如果用户在该计时器结束之前完成输入信息,他/她将只是等待。 这效率不高。

C# 暂停循环,单击按钮后继续

你可以

TaskCompletionSource来做到这一点。创建它并等待其 Task 属性,并在单击按钮时使用它来完成该任务。这允许异步等待用户输入,而不会阻塞线程或使用Task.Delay

TaskCompletionSource<bool> _tcs;
async Task Foo()
{
    // stuff
    _tcs = new TaskCompletionSource<bool>();
    await _tcs.Task
    // other stuff
}
void ButtonClicked(object sender, EventArgs e)
{
    _tcs.SetResult(false);
}