您好,欢迎来到软文情感网。
搜索
您的当前位置:首页WPF中button按钮同时点击多次触发click解决方法

WPF中button按钮同时点击多次触发click解决方法

来源:软文情感网


解决WPF中button按钮同时点击多次触发click的方法,供大家参考,具体内容如下

 DateTime lastClick = DateTime.Now;
 object obj = new object();
 int i = 0;
 private void Button_Click(object sender, RoutedEventArgs e)
 {
 this.IsEnabled = false; 
 var t = (DateTime.Now - lastClick).TotalMilliseconds;
 i++;
 lastClick = DateTime.Now;
 System.Diagnostics.Debug.Print(t + "," + i + ";" + DateTime.Now);
 Thread.Sleep(2000); 
 this.IsEnabled = true;
 }

以上代码并没法解决用户点击两次按钮触发两次的问题,因为ui线程是单线程的,所以这个这样会导致用户连续点击两次,会两秒后又调用Button_Click一次,输出如下:

1207.069,1;2017年4月19日 13:58:22
2055.1176,2;2017年4月19日 13:58:24

所以要在this.IsEnabled = false;后面强制界面刷新,代码如下:

private void Button_Click(object sender, RoutedEventArgs e)
 {
 this.IsEnabled = false;
 DispatcherHelper.DoEvents();
 var t = (DateTime.Now - lastClick).TotalMilliseconds;
 i++;
 lastClick = DateTime.Now;
 System.Diagnostics.Debug.Print(t + "," + i + ";" + DateTime.Now);
 Thread.Sleep(2000); 
 this.IsEnabled = true;
 }
 public static class DispatcherHelper
 {
 [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
 public static void DoEvents()
 {
 DispatcherFrame frame = new DispatcherFrame();
 Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(ExitFrames), frame);
 try { Dispatcher.PushFrame(frame); }
 catch (InvalidOperationException) { }
 }
 private static object ExitFrames(object frame)
 {
 ((DispatcherFrame)frame).Continue = false;
 return null;
 }
 }

DispatcherHelper.DoEvents();这个方法会强制界面刷新,问题就解决了。

Copyright © 2019- ruangwengfa.com 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务