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

k5f*_*k5f 1 c# events

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

Ser*_*rvy 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;
}
Run Code Online (Sandbox Code Playgroud)

这使您可以写:

DoSomething();
await button1.WhenClicked();
DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)