我需要停止执行程序,直到用户点击按钮。我正在进行离散事件模拟,现在的目标是提供说明情况的简单图形。当模拟到达值得显示的事件时,调用绘制该情况的方法。在用户点击按钮之前,我需要不跳回模拟核心的方法(只有在达到有趣点时再次调用)。
答案 0 :(得分:5)
您可以创建一个返回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;
}
这使您可以写:
DoSomething();
await button1.WhenClicked();
DoSomethingElse();