使用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);
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM