.NET:在C#中模拟Javascript的setTimeout方法
背景
每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javascript中为了实现平滑的动画一般采用setTimeout模拟setInterval,这是因为:setTimeout可以保证两次定时任务之间的时间间隔,而setInterval不行(小于设置的间隔时间)。C#中如何模拟setTimeout呢?
System.Timers.Timer
模拟setInterval
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Threading; namespace TimerTest
{
class Program
{
static void Main(string[] args)
{
var timer = new System.Timers.Timer();
timer.Elapsed += timer_Elapsed; Console.WriteLine(DateTime.Now.Second);
timer.Start(); Console.Read();
} static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Thread.Sleep();
Console.WriteLine(DateTime.Now.Second);
}
}
}
运行效果

分析
如果定时器任务执行的时间比较长,两次任务之间会有重叠,下面介绍如何避免这个问题。
模拟setTimeout
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Threading; namespace TimerTest
{
class Program
{
static void Main(string[] args)
{
var timer = new System.Timers.Timer();
timer.Elapsed += timer_Elapsed;
timer.AutoReset = false; Console.WriteLine(DateTime.Now.Second);
timer.Start(); Console.Read();
} static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Thread.Sleep();
Console.WriteLine(DateTime.Now.Second); (sender as System.Timers.Timer).Start();
}
}
}
运行效果

分析
这样就能保证定时任务的执行不会重叠了。
备注
while(true) + sleep 也可以做到,不知道微软的Timer内部是不是用sleep实现的。
.NET:在C#中模拟Javascript的setTimeout方法的更多相关文章
- 在C#中模拟Javascript的setTimeout方法
在C#中模拟Javascript的setTimeout方法 背景 每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javasc ...
- 006——VUE中的内容与属性中使用javascript表达式的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (一)学习JavaScript之setTimeout方法
参考:http://www.w3school.com.cn/jsref/met_win_settimeout.asp HTML DOM Window 对象 定义和用法 setTimeout() 方法用 ...
- javascript高级编程3第二章:在html中使用javascript
2.1 <script>元素 向html页面中插入javascript的主要方法,就是使用<script>元素.这个元素被加入到正式的html规范中.html4.01为< ...
- Javascript高级程序设计——在HTML中使用Javascript
<script>元素 向HTML页面中插入Javascript的主要方法,就是使用<script>元素,<script>元素有六个属性: async:可选.表示应该 ...
- 2. javacript高级程序设计-在HTML中使用JavaScript
1.1 <script>元素 向HTML页面中插入JavaScript的主要方法,就是使用<script>元素,<script>元素定义了一下6个元素: (1). ...
- Javascript系列之在HTML中使用JavaScript
本文主要包括以下几方面内容: 1)使用<script>元素 2)嵌入脚本和外部脚本 3)文档模式对JavaScript的影响 4)考虑禁用JavaScript的场景 只要一提到把Javas ...
- HTML 中使用 JavaScript
在 HTML 中插入 JavaScript 的主要方法,就是使用 <script> 元素, 浏览器会解释并执行其中的 JavaScript 代码. <script> 元素的属 ...
- 2.在HTML中使用JavaScript
目录 1. script元素 2. 标签的位置 3.延迟和异步加载 4.嵌入代码与外部代码的区别 5.noscript元素 6. 小结 1. script元素 向HTML中插入JavaScript的主 ...
随机推荐
- LeetCode765. Couples Holding Hands
N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...
- 基于layui+cropper.js实现上传图片的裁剪功能
最近因项目需求,需要在上传图片的时候先对图片裁剪,然后在上传,所以就有了本文的出现. 开始正文之前,要提一下这个图片的裁剪:图片的裁剪,有前端裁剪,也可以后端裁剪 前端的裁剪我知道的可以分为这么两种: ...
- SG函数(转自百度百科)
给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Games的抽象 ...
- Spring MVC数据绑定(二)
之前学习了SpringMVC数据绑定的基本知识和简单数据绑定以及POJO类型数据的绑定.接下来总结剩下的一些数据类型的绑定 1. 绑定包装POJO 所谓的包装POJO,就是在一个POJO中包含另一个简 ...
- appium---【Mac】Appium-Doctor提示WARN:“ opencv4nodejs cannot be found”解决方案
报错提示: AppiumDoctor ✖. opencv4nodejs cannot be found 如下截图: 解决方案: 第一步:安装cmake并配置环境变量 1.打开terminal执行:c ...
- Hadoop案例(一)之日志清洗
日志清洗案例 一. 简单解析版 1)需求 去除日志中字段长度小于等于11的日志. 2)输入数据 /Sep/::: +] "-" "Mozilla/4.0 (compati ...
- PhpStorm函数注释的设置
首先,PhpStorm中文件.类.函数等注释的设置在:setting->Editor->FIle and Code Template->Includes下设置即可,其中方法的默认是这 ...
- es6的set和get实现数据双向绑定,监听变量变化。
直接上代码吧,这个用法真的是效仿了.net的枚举. vue的数据双向绑定就是用这个实现的. 代码: html: <input type="text" id="inp ...
- LeetCode 628. 三个数的最大乘积
题目描述 LeetCode 628. 三个数的最大乘积 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例1 输入: [1,2,3] 输出: 6 示例2 输入: [1,2,3 ...
- 【转载】Picasso源码解析
原文地址:http://blog.csdn.net/u012702547/article/details/52273918 Picasso是Squareup公司出的一款图片加载框架,能够解决我们在An ...