【发布时间】:2020-09-03 12:31:33
【问题描述】:
如果我在窗口中添加一个按钮并处理其单击异步事件的过程很长,那么即使该按钮正在进行中,也可以多次单击该按钮。它将事件保留在队列中并按顺序执行。
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Delay(2000);
Console.WriteLine("Button 1 ends");
}
问题:是否有可能以事件的同步形式获得这样的结果?
private void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 10000000; i++)
{
}
Console.WriteLine("Button 1 ends");
}
我们希望在用户尝试时防止多次点击。如果系统冻结或出现问题,用户可以多次单击,但我们希望防止这种情况发生。
【问题讨论】:
-
简单的方法是禁用按钮如果您希望用户在现有方法调用正在进行时阻止单击按钮,
-
不,这是最具欺骗性的做法。因为,正如我上面提到的,如果程序卡住或出现问题,可以在这些预防措施之前多次单击(禁用元素,使用另一个 bool 变量等)。我想找到一种更准确的方法来做到这一点。
-
在点击事件处理程序的第一行使用
((Button)sender).IsEnabled = false。祝你好运,点击两次。 -
当您正确处理异常并禁用按钮时,您如何能够多次单击?