.NET使用System.Timers.Timer类实现程序定时执行
【.NET使用System.Timers.Timer类实现程序定时执行】在C#里关于定时器类有3个:System.Windows.Forms.Timer类、System.Threading.Timer类和System.Timers.Timer类。
System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用APISetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,ConsoleApplication(控制台应用程序)无法使用。
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); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- ASP.NET中Response.BufferOutput属性的使用技巧
- 通过 ThreadPoolExecutor 使用线程池
- WP-CLI的使用示例与介绍
- 笔记|hadoop核心组件——HDFS系列讲解之HDFS的高级使用命令
- GIT|GIT 使用帮助
- 解析vue|解析vue 3.0 使用axios库发起 post get 的配置过程
- Git的分支简单使用
- Azure 应用服务App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)()
- 使用reactjs优化了进度条页面性能提高70%
- #|docker-compose中变量的使用