C#实现定时任务,求解惑

徐徐徐徐徐 2013-12-11 03:44:30
我用C#写了一个windows service,但是不知道怎么让其定时执行,还要使用Timer还是有其他方法?还有这实现原理是什么,求解答
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj25810 2013-12-11
  • 打赏
  • 举报
回复
引用 5 楼 liuchaolin 的回复:
[quote=引用 3 楼 h_xuxu 的回复:] [quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote]
引用 3 楼 h_xuxu 的回复:
[quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote] 页面能用来记时的话,母猪都能上树了,B/S的定义就是浏览器与服务器的关系,浏览器不存在了,关系还能继续吗? 所以必须做成服务在服务器上运行,就算没有浏览器也会继续工作[/quote] 有些操蛋的要求是游客在网站里浏览超过10分钟,就弹出提示注册窗口的怎么破?
徐徐徐徐徐 2013-12-11
  • 打赏
  • 举报
回复
引用 2 楼 jhl52771 的回复:
我这个是三个timer 计划 你用一个就行了 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; namespace Mvc51Hiring.Timer { public partial class Service1 : ServiceBase { System.Timers.Timer _mailTime = null; System.Timers.Timer _acquisitionCandidateInfoTime = null; System.Timers.Timer _messageTime = null; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { try { MailStart(PubGet.MailTime); MessgeStart(PubGet.MailTime); AcquisitionCandidateInfoStart(PubGet.AcquisitionCandidateInfoTime); } catch (Exception) { _mailTime.Stop(); _acquisitionCandidateInfoTime.Stop(); _messageTime.Stop(); } } protected override void OnStop() { if (_mailTime != null) _mailTime.Stop(); if (_acquisitionCandidateInfoTime != null) _acquisitionCandidateInfoTime.Stop(); if (_messageTime != null) _messageTime.Stop(); } #region 邮件 /// <summary> /// 调用邮件服务 /// </summary> /// <param name="second">邮件发送间隔时间(ss)</param> private void MailStart(int second) { _mailTime = new System.Timers.Timer(second*1000);//实例化Timer类,设置间隔时间为10000毫秒; _mailTime.Elapsed += StartMailMethods;//到达时间的时候执行事件; _mailTime.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _mailTime.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; _mailTime.Start(); } public void StartMailMethods(object source, System.Timers.ElapsedEventArgs e) { try { string url = (PubGet.MailDomain + "/EmailSend"); var x = RequestHelper.GetPageSource(PubGet.MailRequestTime, url); } catch (Exception ex) { ConfigHelper.ErrorLog("StartMailMethods", ex); } } #endregion #region 采集 private void AcquisitionCandidateInfoStart(int second) { _acquisitionCandidateInfoTime = new System.Timers.Timer(second*1000);//实例化Timer类,设置间隔时间为10000毫秒; _acquisitionCandidateInfoTime.Elapsed += StartAcquisitionCandidateInfoMethods;//到达时间的时候执行事件; _acquisitionCandidateInfoTime.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _acquisitionCandidateInfoTime.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; _acquisitionCandidateInfoTime.Start(); } public void StartAcquisitionCandidateInfoMethods(object source, System.Timers.ElapsedEventArgs e) { try { string url = (PubGet.MailDomain + "/AcquisitionCandidateInfo/Index"); var x = RequestHelper.GetPageSource(PubGet.AcquisitionCandidateInfoRequestTime, url); } catch (Exception ex) { ConfigHelper.ErrorLog("StartAcquisitionCandidateInfoMethods", ex); } } #endregion #region 短信 /// <summary> /// 调用短信服务 /// </summary> /// <param name="second">短信发送间隔时间(ss)</param> private void MessgeStart(int second) { _messageTime = new System.Timers.Timer(second * 1000);//实例化Timer类,设置间隔时间为10000毫秒; _messageTime.Elapsed += StartMessgeMethods;//到达时间的时候执行事件; _messageTime.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _messageTime.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; _messageTime.Start(); } public void StartMessgeMethods(object source, System.Timers.ElapsedEventArgs e) { try { string url = (PubGet.MailDomain + "/SMSSend"); var x = RequestHelper.GetPageSource(PubGet.MailRequestTime, url); } catch (Exception ex) { ConfigHelper.ErrorLog("StartMessgeMethods", ex); } } #endregion } }
谢谢啦
徐徐徐徐徐 2013-12-11
  • 打赏
  • 举报
回复
引用 5 楼 liuchaolin 的回复:
[quote=引用 3 楼 h_xuxu 的回复:] [quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote]
引用 3 楼 h_xuxu 的回复:
[quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote] 页面能用来记时的话,母猪都能上树了,B/S的定义就是浏览器与服务器的关系,浏览器不存在了,关系还能继续吗? 所以必须做成服务在服务器上运行,就算没有浏览器也会继续工作[/quote] 哦,差不多懂了
徐徐徐徐徐 2013-12-11
  • 打赏
  • 举报
回复
引用 4 楼 zj25810 的回复:
[quote=引用 3 楼 h_xuxu 的回复:] [quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote]后台计时这种情况,你需要一直开网站或者项目才能执行,而写服务可以挂服务器上一直不停的执行。这就需要看你的项目需求了。[/quote] 哦,谢谢了
md5e 2013-12-11
  • 打赏
  • 举报
回复
引用 3 楼 h_xuxu 的回复:
[quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote]
引用 3 楼 h_xuxu 的回复:
[quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote] 页面能用来记时的话,母猪都能上树了,B/S的定义就是浏览器与服务器的关系,浏览器不存在了,关系还能继续吗? 所以必须做成服务在服务器上运行,就算没有浏览器也会继续工作
zj25810 2013-12-11
  • 打赏
  • 举报
回复
引用 3 楼 h_xuxu 的回复:
[quote=引用 1 楼 liuchaolin 的回复:] Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?[/quote]后台计时这种情况,你需要一直开网站或者项目才能执行,而写服务可以挂服务器上一直不停的执行。这就需要看你的项目需求了。
徐徐徐徐徐 2013-12-11
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?
杰拉尔 2013-12-11
  • 打赏
  • 举报
回复
我这个是三个timer 计划 你用一个就行了 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; namespace Mvc51Hiring.Timer { public partial class Service1 : ServiceBase { System.Timers.Timer _mailTime = null; System.Timers.Timer _acquisitionCandidateInfoTime = null; System.Timers.Timer _messageTime = null; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { try { MailStart(PubGet.MailTime); MessgeStart(PubGet.MailTime); AcquisitionCandidateInfoStart(PubGet.AcquisitionCandidateInfoTime); } catch (Exception) { _mailTime.Stop(); _acquisitionCandidateInfoTime.Stop(); _messageTime.Stop(); } } protected override void OnStop() { if (_mailTime != null) _mailTime.Stop(); if (_acquisitionCandidateInfoTime != null) _acquisitionCandidateInfoTime.Stop(); if (_messageTime != null) _messageTime.Stop(); } #region 邮件 /// <summary> /// 调用邮件服务 /// </summary> /// <param name="second">邮件发送间隔时间(ss)</param> private void MailStart(int second) { _mailTime = new System.Timers.Timer(second*1000);//实例化Timer类,设置间隔时间为10000毫秒; _mailTime.Elapsed += StartMailMethods;//到达时间的时候执行事件; _mailTime.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _mailTime.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; _mailTime.Start(); } public void StartMailMethods(object source, System.Timers.ElapsedEventArgs e) { try { string url = (PubGet.MailDomain + "/EmailSend"); var x = RequestHelper.GetPageSource(PubGet.MailRequestTime, url); } catch (Exception ex) { ConfigHelper.ErrorLog("StartMailMethods", ex); } } #endregion #region 采集 private void AcquisitionCandidateInfoStart(int second) { _acquisitionCandidateInfoTime = new System.Timers.Timer(second*1000);//实例化Timer类,设置间隔时间为10000毫秒; _acquisitionCandidateInfoTime.Elapsed += StartAcquisitionCandidateInfoMethods;//到达时间的时候执行事件; _acquisitionCandidateInfoTime.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _acquisitionCandidateInfoTime.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; _acquisitionCandidateInfoTime.Start(); } public void StartAcquisitionCandidateInfoMethods(object source, System.Timers.ElapsedEventArgs e) { try { string url = (PubGet.MailDomain + "/AcquisitionCandidateInfo/Index"); var x = RequestHelper.GetPageSource(PubGet.AcquisitionCandidateInfoRequestTime, url); } catch (Exception ex) { ConfigHelper.ErrorLog("StartAcquisitionCandidateInfoMethods", ex); } } #endregion #region 短信 /// <summary> /// 调用短信服务 /// </summary> /// <param name="second">短信发送间隔时间(ss)</param> private void MessgeStart(int second) { _messageTime = new System.Timers.Timer(second * 1000);//实例化Timer类,设置间隔时间为10000毫秒; _messageTime.Elapsed += StartMessgeMethods;//到达时间的时候执行事件; _messageTime.AutoReset = true;//设置是执行一次(false)还是一直执行(true); _messageTime.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; _messageTime.Start(); } public void StartMessgeMethods(object source, System.Timers.ElapsedEventArgs e) { try { string url = (PubGet.MailDomain + "/SMSSend"); var x = RequestHelper.GetPageSource(PubGet.MailRequestTime, url); } catch (Exception ex) { ConfigHelper.ErrorLog("StartMessgeMethods", ex); } } #endregion } }
md5e 2013-12-11
  • 打赏
  • 举报
回复
Timer肯定是要使用的

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧