博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 多线程详解 Part.03 (定时器)
阅读量:6327 次
发布时间:2019-06-22

本文共 1415 字,大约阅读时间需要 4 分钟。

Timer 类:

    设置一个定时器,定时执行用户指定的函数。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。

using System;
using System.Threading;
namespace ThreadExample
{
class TimerExampleState
{
public int counter = 0;
public Timer tmr;
}
 
class App
{
public static void Main()
{
TimerExampleState s = new TimerExampleState();
 
// 创建代理对象 System.Threading.TimerCallback,该代理将被定时调用
TimerCallback timerDelegate = new TimerCallback(CheckStatus);
 
// 创建一个时间间隔为 1s 的定时器
// 第1个参数:指定了 TimerCallback 委托,表示要执行的方法;
// 第2个参数:一个包含回调方法要使用的信息的对象,或者为空引用;
// 第3个参数:延迟时间--计时开始的时刻距现在的时间,单位是毫秒,指定为"0"表示 立即启动计时器;
// 第4个参数:定时器的时间间隔--计时开始后,每隔这么长的一段时间,TimerCallback 所代表的方法将被调用一次
Timer timer = new Timer(timerDelegate, s, 1000, 1000);
s.tmr = timer;
 
// 主线程停下来等待 Timer 对象的终止
while (s.tmr != null)
{
Thread.Sleep(0);
}
Console.WriteLine("Timer example done.");
Console.ReadLine();
}
 
/// 
/// 下面是被定时调用的方法
/// 
/// 
static void CheckStatus(Object state)
{
TimerExampleState s = (TimerExampleState)state;
s.counter++;
Console.WriteLine("{0} Checking Status {1}.", DateTime.Now.TimeOfDay, s.counter);
if (s.counter == 5)
{
//使用 Change 方法改变了时间间隔为2秒,再等待10秒
(s.tmr).Change(10000, 2000);
Console.WriteLine("changed");
}
if (s.counter == 10)
{
Console.WriteLine("disposing of timer!");
s.tmr.Dispose();
s.tmr = null;
}
}
}
}

     程序首先创建了一个定时器,它将在创建 1 秒之后开始每隔 1 秒调用一次 CheckStatus() 方法。当调用 5 次以后,CheckStatus() 方法中修改了时间间隔为 2 秒,在并且指定在 10 秒后重新开始。当计数达到 10 次, 调用 Timer.Dispose()方法删除了 timer 对象,主线程于是跳出循环,终止程序。

转载地址:http://vhgaa.baihongyu.com/

你可能感兴趣的文章
web服务器tomcat入门实战
查看>>
AVEVA CSG 几何图形输出接口
查看>>
POJ 2653 Pick-up sticks(几何)
查看>>
【阶段试题分析】阶段一试题总结
查看>>
Python 模块调用
查看>>
私有CA以及虚拟主机使用https加密方式传输
查看>>
HBase篇--HBase常用优化
查看>>
CMarkUp介绍
查看>>
JSTL的比较运算符有哪些,用例说说它们的作用
查看>>
怎么学JavaScript?来自前辈的分享 【转载】
查看>>
YYHS-Floor it(递推+矩阵乘法+快速幂)
查看>>
部署ceph mds node
查看>>
[LeetCode] Merge Sorted Array
查看>>
BZOJ1187:[HNOI2007]神奇游乐园——题解
查看>>
BZOJ3930:[CQOI2015]选数——题解
查看>>
CGI FASTCGI php-fpm
查看>>
在fragment中获取Application数据
查看>>
详解CSS float属性(转)
查看>>
利用JDBC连接Oracle数据库(转)
查看>>
Java基本语法-----java流程控制语句
查看>>