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

 更新时间:2017年04月19日 14:20:50   作者:liningit  
这篇文章主要为大家详细介绍了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();这个方法会强制界面刷新,问题就解决了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • asp.net 页面之间传递参数的几种方法

    asp.net 页面之间传递参数的几种方法

    因为在项目中需要在两个页面之间传递一些参数,所以总结出以下几个传递参数的方法
    2009-06-06
  • .Net站点设置多个路由对应同一个Action

    .Net站点设置多个路由对应同一个Action

    这篇文章介绍了.Net站点设置多个路由对应同一个Action的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • .NET获取客户端的操作系统版本、浏览器版本和IP地址

    .NET获取客户端的操作系统版本、浏览器版本和IP地址

    这篇文章主要为大家详细介绍了.NET如何获取客户端的操作系统版本、浏览器版本和IP地址,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 在ASP.Net Core中使用Lamar的全过程

    在ASP.Net Core中使用Lamar的全过程

    这篇文章主要给大家介绍了关于在ASP.Net Core中使用Lamar的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Json.net 常用使用小结(推荐)

    Json.net 常用使用小结(推荐)

    下面小编就为大家带来一篇Json.net 常用使用小结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • .NET读写Excel工具Spire.Xls使用 Excel文件的控制(2)

    .NET读写Excel工具Spire.Xls使用 Excel文件的控制(2)

    这篇文章主要为大家详细介绍了.NET读写Excel工具Spire.Xls使用,Excel文件的控制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Devexpress中Gridcontrol查找分组

    Devexpress中Gridcontrol查找分组

    本文通过实例代码给大家介绍了Devexpress中Gridcontrol查找分组的方法,非常不错,具有一定的参考价诶接价值,需要的朋友一起看看吧
    2018-08-08
  • .NET Core 3.0中WPF使用IOC的图文教程

    .NET Core 3.0中WPF使用IOC的图文教程

    这篇文章主要给大家介绍了关于在.NET Core 3.0中WPF使用IOC的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • asp.net gridview多页时的批量删除

    asp.net gridview多页时的批量删除

    多余的代码我就不贴了,有段时间没写.net了,最近又开始写了,结果就一个gridview含多页的批量删除弄了我很久。贴上代码,忘记再看下:
    2008-07-07
  • ASP.NET用DataSet导出到Excel的方法

    ASP.NET用DataSet导出到Excel的方法

    ASP.NET用DataSet导出到Excel的方法,需要的朋友可以参考一下
    2013-03-03

最新评论