在C#里关于定时器类有3个:System.Windows.Forms.Timer类、System.Threading.Timer类和System.Timers.Timer类。

System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console  Application(控制台应用程序)无法使用。

System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现轻量、精确的计时,对应用程序、消息没有特别的要求。System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。


        public int wrong = 0;
        System.Timers.Timer time = new System.Timers.Timer();
        
        private void begin_Click(object sender, EventArgs e)
        {
            if (action.Text == "启动监测")
            {
                action.Text = "停止监测";
                label2.Text = "已启动";                 if (time.Interval.ToString() == "100") // The default value of interval is 100s.
                {
                    time.Elapsed += new ElapsedEventHandler(TimeEvent);
                    time.Interval = 1000;
                }
                time.Enabled = true;
            }
            else
            {
                action.Text = "启动监测";
                label2.Text = "已停止";                 time.Enabled = false;
            }         }         private static void TimeEvent(object source, ElapsedEventArgs e)
        {
            int tsec = e.SignalTime.Second;
            int isec = 10;
            if (tsec == isec) //it will be activated at 10s of every minutes.
            {
                if (!Check("http://www.test.com"))
                {
                    string smtp_server="192.168.8.1";
                    int port = 25;
                    string mail_from = "test_from@163.com";
                    string sender="test";
                    string mail_to = "test_to@163.com";
                    string receiver="adminer";
                    string subject = "The site is run out exception on " + DateTime.Now.ToString("yyyyMMddhhmmss");
                    string body = "The site can not open on " + DateTime.Now.ToString() + ",please check it !";
                    try
                    {
                        SendEmail(smtp_server, port, mail_from, sender, mail_to, receiver, subject, body);
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }         private static bool Check(string urlStr)
        {
            HttpWebRequest myWebRequest = null;
            try
            {
                myWebRequest = (HttpWebRequest)WebRequest.Create(urlStr);
                HttpWebResponse res = (HttpWebResponse)myWebRequest.GetResponse();
                if (res.StatusCode == HttpStatusCode.OK)
                {
                    res.Close();
                    return true;
                }
                else
                {
                    res.Close();
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }         public static void SendEmail(string smtp_server, int port, string mail_from, string sender, string mail_to, string receiver, string subject, string body)
        {
            MailAddress from = new MailAddress(mail_from, sender);
            MailAddress to = new MailAddress(mail_to, receiver);
            MailMessage message = new MailMessage(from, to);
            message.BodyEncoding = Encoding.UTF8;
            message.IsBodyHtml = true;
            message.Subject = subject;
            message.Body = body;             SmtpClient client = new SmtpClient(smtp_server, port);
            //SmtpClient client = new SmtpClient(smtp_server);             // Add credentials if the SMTP server requires them. 
            client.Credentials = CredentialCache.DefaultNetworkCredentials;
            client.Send(message);
        }

使用System.Timers.Timer类实现程序定时执行的更多相关文章

  1. 【C#/WPF】用System.Timers.Timer计时器做浮窗广告

    需求:鼠标静止一段时间后,显示浮窗广告. 思路:界面XAML写好一个专门显示浮窗广告的Canvas,先设为不可见Visibility=”Collapsed”,然后用System.Timers.Time ...

  2. System.Timers.Timer(定时器)

    1.System.Timers命名空间下的Timer类.System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法 ...

  3. C# System.Timers.Timer的一些小问题?

    比如设置间隔时间是 1000msSystem.Timers.Timer mytimer = new System.Timers.Timer(1000);问题若响应函数执行的时间超过了 1000 ms, ...

  4. C# --System.Timers.Timer 定时方法

    注意Start() 注意要等Interval 时间间隔 static void Main(string[] args) { System.Timers.Timer t = new System.Tim ...

  5. C# System.Timers.Timer中的坑,程序异常退出后timer依然运行问题

    问题背景 C#小白,由于本公司IM系统服务端(java)是本人独立开发的,加上现在所在项目需要对接IM系统,于是IM的客户端(C#实现)对接工作就交给我了.于是C#小白的我天真的以为只要调用C#端的S ...

  6. .NET System.Timers.Timer的原理和使用(开发定时执行程序)

    概述(来自MSDN) Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发Elapsed 事件的周期性间隔.然后可以操控此事件以提供定期处理.例如,假设您有一台关键性服务器,必须每周7 ...

  7. C# System.Timers.Timer定时器的使用和定时自动清理内存应用

    项目比较大有时候会比较卡,虽然有GC自动清理机制,但是还是有不尽人意的地方.所以尝试在项目启动文件中,手动写了一个定时器,定时清理内存,加快项目运行速度. public class Program { ...

  8. C# 定时执行方法: System.Timers.Timer用法示例

    System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒        private void Form1_Load(ob ...

  9. 简述System.Windows.Forms.Timer 与System.Timers.Timer用法区别

    System.Windows.Forms.Timer 基于窗体应用程序 阻塞同步 单线程 timer中处理时间较长则导致定时误差极大. System.Timers.Timer 基于服务 非阻塞异步 多 ...

随机推荐

  1. 小度Wifi_设置

    PS:现在我用的小度Wifi驱动的 安装程序的版本为:“XiaoduWiFi140923_M_3.0.9.rar”(保存于“百度云 OsSkill --> 软件安装包 > 小度Wifi__ ...

  2. Java存储过程调用CallableStatement

    什么是存储过程? 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有 ...

  3. D3.js 让图表动起来

    D3 支持制作动态的图表.有时候,图表的变化需要缓慢的发生,以便于让用户看清楚变化的过程,也能给用户不小的友好感. 一.什么是动态效果 绘制完成后不再发生变化的,这是静态的图表. 动态的图表,是指图表 ...

  4. Android控件之CheckBox(复选框控件)

    一.有两种状态: 选中状态(true).未选中状态(false) 二.属性 android:id = "@+id/checkbox" android:layout_width=&q ...

  5. datagrid实现行的上移和下移

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  6. 传大附件在iis7以上的设置

    IIS7下设置上传附件大小的限制,下载附件限制问题   最近项目中涉及到一个上传附件的问题,项目在本地运行时上传无论多大的附件都是没有问题,但是一旦部署到服务器上以后上传的附件超过一定大小就上传不成功 ...

  7. html中盒子模型立体结构图

    边框(border),位于盒子的第一层..元素内容(content).内边距(padding),两者同位于第二层..背景图(background-image),位于第三层..背景色(backgroun ...

  8. MySQL锁监视器

    还在为看不懂何登成的加锁处理分析文章感到羞愧吗? 还在因为何大师的笔误,陷入深深的迷茫吗? 只要你拥有大于5.6.16版本的MySQL,锁监视器你值得拥有! 快速入门 开启 set GLOBAL in ...

  9. object-c NSString 转成特定编码格式如utf8、gbk等

    有两种方式 第一种是先转换成特定编码格式NSDATA 第二种是先转换成特定编码格式char *(cString) 转成gbk: 第一种: - (NSString *) utf82gbk:(NSStri ...

  10. webstorm注释写出的提示

    写出这种代码提示的方法是 在一个函数上方打出 /** 然后敲回车就出出来 没达到上面的效果,自己手动写上即可. 这样的好处是: 当你写代码用到此方法的时候会有参数类型提示,如图