基本信息
源码名称:System.Threading.Timer 常用操作实例
源码大小:3.44KB
文件格式:.rar
开发语言:C#
更新时间:2013-06-27
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
System.Threading.Timer基本操作示例下载


using System;
using System.Collections.Generic;
using System.Threading;

/// <summary>
/// 管理类
/// </summary>
public class PaperManager
{
    /// <summary>
    /// 定时器
    /// </summary>
    private Timer iTimer;
    /// <summary>
    /// 启动时间
    /// </summary>
    private TimeSpan dueTime;
    /// <summary>
    /// 方法调用间隔
    /// </summary>
    private TimeSpan period;
    /// <summary>
    /// 委托
    /// </summary>
    private TimerCallback timerDelegate;
    /// <summary>
    /// 静态实例
    /// </summary>
    private static readonly PaperManager self = new PaperManager();
    /// <summary>
    /// 构造函数
    /// </summary>
    public PaperManager()
    {
        timerDelegate = new TimerCallback(CheckStatus);
    }
    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    public static PaperManager getInstance()
    {
        return self;
    }
    /// <summary>
    /// 设置启动时间间隔
    /// </summary>
    /// <param name="days">天</param>
    /// <param name="hours">小时</param>
    /// <param name="minutes">分钟</param>
    /// <param name="seconds">秒</param>
    /// <param name="milisecond">毫秒</param>
    public void setDueTime(int days, int hours, int minutes, int seconds, int milisecond)
    {
        dueTime = new TimeSpan(days, hours, minutes, seconds, milisecond);
    }
    /// <summary>
    /// 设置回调时间间隔
    /// </summary>
    /// <param name="days">天</param>
    /// <param name="hours">小时</param>
    /// <param name="minutes">分钟</param>
    /// <param name="seconds">秒</param>
    /// <param name="milisecond">毫秒</param>
    public void setPeriod(int days, int hours, int minutes, int seconds, int milisecond)
    {
        period = new TimeSpan(days, hours, minutes, seconds, milisecond);
    }
    /// <summary>
    /// 开始
    /// </summary>
    public void Start()
    {
        AutoResetEvent autoEvent = new AutoResetEvent(false);
        dueTime = TimeSpan.FromSeconds(0);
        period = TimeSpan.FromSeconds(10);
        iTimer = new Timer(timerDelegate, autoEvent, dueTime, period);
        autoEvent.WaitOne(5000, false);
        iTimer.Change(dueTime, period);
    }
    /// <summary>
    /// 停止
    /// </summary>
    public void Stop()
    {
        iTimer.Dispose();
    }
    /// <summary>
    /// 执行一次
    /// </summary>
    public void ExcuteOneTime()
    {
        if (iTimer != null)
        {
            iTimer.Dispose();
        }
        //如果 period 为零 (0) 或 -1 毫秒,而且 dueTime 为正,则只会调用一次 callback;
        //计时器的定期行为将被禁用,但通过使用 Change 方法可以重新启用该行为。
        setDueTime(0, 0, 0, 0, 1);
        setPeriod(0, 0, 0, 0, -1);
        AutoResetEvent autoEvent = new AutoResetEvent(false);
        iTimer = new Timer(timerDelegate, autoEvent, dueTime, period);
        autoEvent.WaitOne(5000, false);
        iTimer.Change(dueTime, period);
    }
    /// <summary>
    /// 行为
    /// </summary>
    /// <param name="nObject"></param>
    public void CheckStatus(object nObject)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)nObject;
        if (ExcuteUpdate())
        {
            autoEvent.Set();
        }
    }
    /// <summary>
    /// 更新
    /// </summary>
    /// <returns></returns>
    private bool ExcuteUpdate()
    {
        try
        {
            //应该从数据库获得Paper对象的集合,这里简略
            //List<Paper> paperList = getPaperList();
            List<Paper> paperList = new List<Paper>();
            foreach (Paper item in paperList)
            {
                if (item.EndTime <= DateTime.Now)
                {
                    if (item.Status == Paper.StatusOfNormal)
                    {
                        item.Status = Paper.StatusOfTerminate;
                    }
                }
            }
            ////执行数据更新,这里省略
            return true;
        }
        catch
        {
            return false;
        }
    }
}