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
猜你喜欢
- 在Maven工程里运行Java main方法mvn compilemvn exec:java -Dexec.mainClass="
- 本文实例为大家分享了C# Winform实现进度条显示的具体代码,供大家参考,具体内容如下创建一个窗体,命名为StartForm添加一个ti
- 一、前言最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时,编译出来的 Jar 包很大(服务器多达500M
- spring cloud 配置中心客户端启动先启动了配置中心,然后启动客户端,发现打印的日志是这样的2020-04-29 11:13:02.
- 背景在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作。他们会引发软件的卡顿甚至假死,严重影响软件的使用。因此,这类耗时或阻塞的
- 最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用J
- 在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标
- 在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去
- 需求有一个固定URL的文件,服务器端程序会定期的更新这个文件,现在需要写一个工具来监控这个文件的变化。解决办法最初我想到的是把这个文件下载下
- 一、简介约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢
- @SuppressWarnings 注解@SuppressWarnings: 抑制编译器警告如下,可以看到idea中有警告的颜色标注当我们不
- Spring AOP预处理Controller的参数实际编程中,可能会有这样一种情况,前台传过来的参数,我们需要一定的处理才能使用比如有这样
- 上一篇介绍了elasticsearch的client结构,client只是一个门面,在每个方法后面都有一个action来承接相应的功能。但是
- 本文实例讲述了C#图像处理之图像平移的方法。分享给大家供大家参考。具体如下://定义图像平移函数private static Bitmap
- 最近有由于需要,我开始接触阿里云的云市场的印刷文字识别-营业执照识别这里我加上了官网的申请说明,只要你有阿里云账号就可以用,前500次是免费
- C# Linq延迟查询在定义linq查询表达式时,查询是不会执行,查询会在迭代数据项时运行。它使用yield return 语句返回谓词为t
- java 数据结构单链表的实现 单链表实现链表的打印及元素删除操作,链表的实现主要是next属性的定义,将一堆节点关
- 1 引入 pom 包<dependency> <groupId>io.github.res
- 有时候,我们需要把对象A的所有值复制给对象B(B = A),但是这样用等号给赋值你会发现,当B中的某个对象值改变时,同时也会修改到A中相应对
- 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets