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();这个方法会强制界面刷新,问题就解决了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。
您可能感兴趣的文章:WPF自定义控件和样式之自定义按钮(Button)WPF水珠效果按钮组的实现教程WPF制作带小箭头的按钮完整代码WPF图片按钮的实现方法WPF MVVM制作发送短信小按钮WPF微信聊天和通讯录按钮样式代码分享WPF实现窗体中的悬浮按钮
WPF
button
click
相关文章
visual studio 2019使用net core3.0创建winform无法使用窗体设计这篇文章主要介绍了visual studio 2019使用net core3.0创建winform无法使用窗体设计器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-03-03
C#/VB.NET 在Word中添加条码、二维码的示例代码这篇文章主要介绍了C#/VB.NET 如何在Word中添加条码、二维码,代码中将分为在Word正文段落中、页眉页脚中等情况来添加。感兴趣的朋友可以了解下 2020-07-07
asp.net用url重写URLReWriter实现任意二级域名 高级篇Asp.net 用url重写(URLReWriter)实现任意二级域名,需要的朋友可以参考下,建议先看一下上一篇文章。 2009-11-11
c#.NET 写txt文件小例子在.NET里,有时要往TXT文件里写内容,其实很简单。 2013-06-06
asp.net得到本地电脑基本信息的简单方法在网络编程中的通用方法 系统环境类 ASP.NET 专用属性 2009-06-06
asp.net 结合YUI 3.0小示例公司最近做了个WEB项目,网上这方面的东西也很少的,没办法就自己摸索了。 用到了Ajax这一段时间研究了一下它的用法,故来解释一下。
2009-11-11
vs2010 vs2008 vs2005 快捷键大全本文搜集整理了一些实用快捷键:VS2005的隐藏快捷键;VS2010版快捷键;VS2008快捷键大全等等,需要了解的朋友可以参考下 2012-12-12
详解.NET Core使用Quartz执行调度任务进阶这篇文章主要介绍了.NET Core使用Quartz执行调度任务进阶,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2019-04-04
.Net Core Api 使用版本控制详解Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制,这篇文章主要介绍了.Net Core Api 使用版本控制详解,感兴趣的小伙伴们可以参考一下 2018-10-10
VB.NET进度条的方法代码VB.NET进度条的方法代码,需要的朋友可以参考一下 2013-04-04
最新评论

评论(0)