我需要停止执行程序,直到用户单击按钮.我正在进行离散事件模拟,现在的目标是提供说明情况的简单图形.当模拟到达值得显示的事件时,调用绘制该情况的方法.我需要在用户单击按钮之前不跳回模拟核心的方法(仅在达到有趣点时再次调用).
您可以创建一个方法,该方法将返回在Task下次单击特定按钮时将完成的方法,它可以通过使用TaskCompletionSource对象来完成.然后await,您可以在单击特定按钮时继续执行该方法的任务:
public static Task WhenClicked(this Button button)
{
var tcs = new TaskCompletionSource<bool>();
EventHandler handler = null;
handler = (s, args) =>
{
tcs.TrySetResult(true);
button.Click -= handler;
};
button.Click += handler;
return tcs.Task;
}
Run Code Online (Sandbox Code Playgroud)
这使您可以写:
DoSomething();
await button1.WhenClicked();
DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)