我想要await
a button.click()
事件。为此创建了一个扩展GetAwaiter()
method:
public static class ButtonAwaiterExtensions
{
public static ButtonAwaiter GetAwaiter(this Button button)
{
return new ButtonAwaiter()
{
Button = button
};
}
public class ButtonAwaiter : INotifyCompletion
{
public bool IsCompleted
{
get { return false; }
}
public void GetResult()
{
}
public Button? Button { get; set; }
public void OnCompleted(Action continuation)
{
RoutedEventHandler? h = null;
h = (o, e) =>
{
Button!.Click -= h;
continuation();
};
Button!.Click += h;
}
}
}
(我在这里找到的:http://blog.roboblob.com/2014/10/23/awaiting-for-that-button-click/ http://blog.roboblob.com/2014/10/23/awaiting-for-that-button-click/)
这样我就可以等待Button1.Click()
事件直接与await Button1;
这太棒了。
但我不知道如何将这个等待与类似的东西结合起来 await Task.WhenAny()
I tried
等待 Task.WhenAny(Button1, Button2);
它会告诉我它“无法从按钮转换为任务”。
我想我在这里找到了解决方案:将“Task.WhenAll”与“INotifyCompletion”结合使用 https://stackoverflow.com/questions/64554979/using-task-whenall-with-inotifycompletion只需添加一个方法
public static async Task GetTask()
{
await this;
}
到我的 ButtonAwaiterExtensions 类,但是关键字this
不能在我的静态类中使用。
我不知道该方法要返回什么,或者一般如何返回await
any Button.Click()
。有任何想法吗?