C#停止执行直到事件发生

我需要停止执行程序,直到用户单击按钮。 我正在进行离散事件模拟,现在的目标是提供说明情况的简单图形。 当模拟到达值得显示的事件时,调用绘制该情况的方法。 我需要在用户单击按钮之前不跳回模拟核心的方法(仅在达到有趣点时再次调用)。

您可以创建一个方法,该方法将返回一个Task ,该Task将在下次单击某个特定按钮时完成,它可以通过使用TaskCompletionSource对象来完成。 然后,您可以await该任务在单击特定按钮时继续执行您的方法:

 public static Task WhenClicked(this Button button) { var tcs = new TaskCompletionSource(); EventHandler handler = null; handler = (s, args) => { tcs.TrySetResult(true); button.Click -= handler; }; button.Click += handler; return tcs.Task; } 

这使您可以写:

 DoSomething(); await button1.WhenClicked(); DoSomethingElse();