C# Timer控件学习之使用Timer解决按钮幂等性问题
作者:IC00 发布时间:2021-07-07 11:26:09
前言:
Timer是一个定时器,作为C#开发Timer控件是我们用的比较多的一个控件,它的功能很简单,但是也是值得我们去学习的一个知识点,今天这篇文章就是想总结一下这个Timer控件,如果经常用还好,可以随时知道怎么写,对于我这种记性不好的同学呢,我就以这种形式去做一个小小的笔记,方便自己下一次使用和查询,内容比较简单,会的同学可以略过了!
Timer控件的属性
属性
AutoReset 获取或设置一个布尔值,该值指示 Timer 是否应只引发一次 Elapsed 事件((false) 或重复 (true))。
CanRaiseEvents 获取一个指示组件是否可以引发事件的值。(继承自 Component)
Container 获取包含 IContainer 的 Component。(继承自 Component)
DesignMode 获取一个值,用以指示 Component 当前是否处于设计模式。(继承自 Component)
Enabled 获取或设置一个值,该值指示 Timer 是否应引发 Elapsed 事件。
Events 获取附加到此 Component 的事件处理程序的列表。(继承自 Component)
Interval 获取或设置引发 Elapsed 事件的间隔(以毫秒为单位)。
Site 获取或设置在设计模式中将 Timer 绑定到其容器的站点。
SynchronizingObject 获取或设置对象,该对象用于在间隔过后封送发出的事件处理程序调用。
Timer控件的方法
方法
BeginInit() 开始用于窗体或由其他组件使用的 Timer 的运行时初始化。
Close() 释放由 Timer 占用的资源。
CreateObjRef(Type) 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(继承自 MarshalByRefObject)
Dispose() 释放由 Component 使用的所有资源。(继承自 Component)
Dispose(Boolean) 释放由当前 Timer 使用的所有资源。
EndInit() 结束用于窗体或由其他组件使用的 Timer 的运行时初始化。
Equals(Object) 确定指定对象是否等于当前对象。(继承自 Object)
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetLifetimeService() 检索控制此实例的生存期策略的当前生存期服务对象。(继承自 MarshalByRefObject)
GetService(Type) 返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。(继承自 Component)
GetType() 获取类型
界面设计
简单的界面设计,我们点击界面上的按钮,看看如何使用Timer 解决按钮的幂等性问题,我们知道按钮我们多次点击会多次触发函数,如果连接下位机会发送多次同样的命令,显然这是不符合交互逻辑的,所以我们使用Timer的方式将按钮的状态改变一下,将按钮改为只读。
效果演示
点击按钮我们可以看到按钮变灰了,表示我们禁止它再触发,这样可以避免多次点击,不会产生幂等性问题,按钮二我们让它在后台两秒打印一遍,我们可以看到两秒触发一次这个函数。
代码逻辑
代码比较简单,我们重在学习,学一下这个控件证明用,知道逻辑就可以了,代码很简单,两个按钮两个定时器,将它们的触发函数看懂就可以实现了,按钮一的操作就是针对按钮重复提交而设计的。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test929
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
button1.Enabled = true;//将按钮的用户交互打开
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;//打开Timer定时器按钮
button1.Enabled = false;//将按钮的用户交互关闭这样可以实现,按钮不可点击两秒
}
private void button2_Click(object sender, EventArgs e)
{
timer2.Enabled = !timer2.Enabled;//打开定时器二的函数
}
private void timer2_Tick(object sender, EventArgs e)
{
Console.WriteLine("两秒执行一次这个函数");//打印这个话证明我们进入这个函数
}
}
}
来源:https://juejin.cn/post/7154685103241691167


猜你喜欢
- 关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间。在应用中我们会需要使用redis设置过期时间,比如单点登
- 本文实例讲述了Android ListView的简单应用。分享给大家供大家参考,具体如下:我们今天要讲的内容是Android中ListVie
- Android中Property模块的键值设置Prop模块是保存少量的全局共享信息,其保存的数据具有信息量少,跨进程共享数据等特性;每一条信
- 目录前言1、创建一个控制台应用程序2、编写测试代码并分析3、总结前言对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很
- 本文实例为大家分享了tryAcquire()、addWaiter()、acquireQueued()的用法 ,供大家参考,具体内容如下try
- java parseInt()
- 安装方式:使用vs自带的nuget管理工具,搜索AutoMapper ,选择第一个安装到你的项目即可。先说说DTODTO是个什么东东?DTO
- 一直使用的是FastJson,感觉还不错,很方便。看了一段别人的分析,觉得很有道理。为什么要使用Fastjson,其实原因不需要太多,喜欢就
- 本文实例为大家分享了C# SqlHelper应用技巧,供大家参考,具体内容如下使用App.config配置文件封装连接字符串,方便重复使用-
- 一、使用#定义参数1. 持久层接口添加根据名字内容模糊查询方法// 根据名字内容模糊查询 List<User
- 最近我要做一个爬虫。这个爬虫需要如下几个步骤:1 填写注册内容(需要邮箱注册)2 过拖拽验证码(geetest)3 注册成功会给邮箱发一封确
- 一,问题采取eureka集群、客户端通过Ribbon调用服务,Ribbon端报下列异常java.net.UnknownHostExcepti
- 前言Kotlin一个强大之处就在于它的扩展函数,巧妙的运用这些扩展函数可以让你写出的代码更加优雅,阅读起来更加流畅,下面总结了在开发中经常用
- 一、静态代理模式1.1、 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标
- 前言上一篇文章中我们通过自己开发了一个负载均衡组件,实现了随机算法的负载均衡功能,如果要实现其他算法,还需要修改代码增加相应的功能。这一篇文
- 今天群里有人问了关于仿京东App分类页面的实现,而我之前正好查过这方面的资料,手上正好有一个demo,正好分享给大家看看,个人觉得效果棒棒哒
- 前言在C语言中,没有专门用来表示字符串的类型。C语言的字符串是一系列以’\0’为结尾的字符的集合。虽
- 目录前言RenderObject 类继承层级解析RenderBox叶节点与父节点控件的测量与布局performResize 和 perfor
- 向上转型:子类对象转为父类,父类可以是接口。公式:Father f = new Son();Father是父类或接口,son是子类。向下转型
- activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业务非常的复杂,比如一个简单的采购流程:流程如下: 供应商上新商品