C# 停止执行,直到引发事件

本文关键字:事件 执行 | 更新日期: 2023-09-27 18:19:41

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

C# 停止执行,直到引发事件

您可以创建一个方法,该方法将返回一个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();