使用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);
        }
posted @ 2008-10-29 10:14  梦想天空(山边小溪)  阅读(3784)  评论(0编辑  收藏  举报