开启左侧

C#按钮如何避免被重复点击?

  [复制链接]
绝地武士 发表于 2018-12-12 21:19:21 | 显示全部楼层 |阅读模式
       C#中实现了一个参数保存功能的按钮,点击后保存参数,客户会出现多次点击,如果调用到了核心的处理过程就容易崩溃,所以在按钮事件里面添加了Enabled设置为false,执行完成后再最后再设置为true,但是遇到问题是,连续点击多次,这个时候按钮已经执行任务变灰后不可以点击了,但是变正常后按钮又执行了之前的点击,在变灰色的时候点了多少次,它都会在变正常后自动再次执行多少次,哪怕你鼠标没有在按钮上面了,怎么解决?网上有很多方式,什么锁啊,定时器啊,委托啊,异步等等,都不怎么好用!

代码如下:
  1. btn_DebugImage.Enabled = false;
  2. //中间是执行任务的函数和代码
  3. btn_DebugImage.Enabled = true;
复制代码

解决方案:
我们第一想到的是肯定是消息队列中消息在禁用后继续执行了,所以就从这个上面做文章:
在btn_DebugImage.Enabled = true; 该句代码前面加:
  1. Application.DoEvents();
复制代码

就是让应用程序的消息队列自动走完(在按钮正常前清空消息队列即可),那么就直接解决了后续的响应问题了!
ydzheu 发表于 2019-7-6 11:33:26 | 显示全部楼层
每次之前都判断一下button的状态,如果还在执行直接返回;否则设置初始状态,然后往下执行
if (!this.btn_DebugImage.Enabled)
            { return; }
            this.btn_DebugImage.Enabled = false;
//执行代码
this.btn_DebugImage.Enabled = true;
梁liang 发表于 2019-9-17 11:56:21 | 显示全部楼层
可以把这句换在另外一个控件里面btn_DebugImage.Enabled = true;
Old.T 发表于 2019-9-19 16:06:54 | 显示全部楼层
异步线程应该好用啊
sankyo_feng 发表于 2019-10-7 12:09:50 | 显示全部楼层
我设定了一个全局的BOOL 变量,运行中置ON,判断是不是为OFF.可以使用
gnjiao 发表于 2019-10-9 00:56:06 | 显示全部楼层
我也曾经纠结过这种问题,看看楼主解决方法。感谢分享。
huangwei 发表于 2019-10-29 09:13:44 | 显示全部楼层
我也遇到了,貌似没有出现过问题
285367413 发表于 2019-12-10 11:24:12 | 显示全部楼层
感谢  学到了  能改这些小细节真的很棒
DZQZKA 发表于 2019-12-19 19:17:24 | 显示全部楼层
有些的知识虽然目前用不到,但是可以积累
az19960205 发表于 2020-1-16 14:54:19 | 显示全部楼层
难道不是-=相应的事件吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表