如果快速点击多次,ChildWindow关闭按钮事件处理程序会执行多次。

5

我的ChildWindow有一个关闭按钮和处理程序分配给Click事件。 代码(仅供参考):

声明关闭按钮:

<Button x:Name="CloseButton" Click="OnCloseButtonClick" />

私有计数器(用于诊断问题):

private uint _i;

关闭事件处理程序:

OnCloseButtonClick(object sender, RoutedEventArgs e)
{
     DialogResult = true;
     System.Diagnostics.Debug(_i++);
}

快速点击程序后,程序会输出“1”、“2”、“3”等数字……

据我所知,在将DialogResult设置为true(或false)之后,子窗口应该关闭,并且不应该有任何方式再次触发CloseButton的Click事件。

有人能帮我找出问题的原因并帮助解决它吗,而不需要使用bool标志(executed/!executed)?


1
我猜第一行添加 ((Button)sender).IsEnabled=false 不是一个解决方案? - Bob Vale
是的,但它看起来像是一种解决方法。我也想知道问题的原因。 - Dzmitry Martavoi
我认为没有问题。一个按钮可以被点击多次,而当你不想让它可点击时,你可以禁用该按钮。 - Jehof
3
问题是因为关闭按钮激活了关闭窗口动画来关闭窗口,这意味着在动画完成并关闭窗口之前,按钮事件是可用的。参见SO - Bob Vale
谢谢,这正是我想要的内容。 - Dzmitry Martavoi
1个回答

2

将事件处理程序逻辑与 UI 可视状态混合在一起对我来说看起来很烦人 :) 但是,据我所了解,现在没有更好的解决办法。 - Dzmitry Martavoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接