在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 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);
}