• 使用System.Timers.Timer类实现程序定时执行


     在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);
            }
  • 相关阅读:
    软件系统架构演变
    PL/SQL语法
    ambari安装指南
    手把手带你使用JS-SDK自定义微信分享效果
    微信公众平台无法使用支付宝收付款的解决方案
    php创建含文件夹的zip文件
    捣鼓TinyMCE 粘贴图片并上传+Django后台
    捣鼓TinyMCE粘贴图片并上传+Flask后台
    关于Java 中Integer 和Long对象 对比的陷阱(简单却容易犯的错误)
    Java东西太多,记录一些知识点
  • 原文地址:https://www.cnblogs.com/zxtceq/p/5894921.html
Copyright © 2020-2023  润新知