最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 22:35:41
文档

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, Routed
推荐度:
导读WPF中button按钮同时点击多次触发click解决方法:解决WPF中button按钮同时点击多次触发click的方法,供大家参考,具体内容如下 DateTime lastClick = DateTime.Now; object obj = new object(); int i = 0; private void Button_Click(object sender, Routed


解决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();这个方法会强制界面刷新,问题就解决了。

文档

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, Routed
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top