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

时间:2014-08-27 17:15:24

标签: c# events

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

1 个答案:

答案 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();