C# 暂停循环,单击按钮后继续
本文关键字:按钮 继续 单击 暂停 循环 | 更新日期: 2023-09-27 17:57:04
我有一个在初始化组件之后调用的方法,方法签名是这样的:
public async void method_name ()
{
// code ...
}
在该方法中,我有一个运行 4 个不同 if
语句的循环。我需要循环在每个 if 语句处暂停并等待用户按下按钮。因为按下该按钮将添加信息和内容。按下按钮后,我希望循环继续,当然在下一个 if 语句处暂停。
我想过像await Task.Delay(30000);
那样做,但是如果用户在该计时器结束之前完成输入信息,他/她将只是等待。 这效率不高。
你可以
用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);
}