C#实现定时任务,求解惑
我用C#写了一个windows service,但是不知道怎么让其定时执行,还要使用Timer还是有其他方法?还有这实现原理是什么,求解答
[解决办法]
Timer肯定是要使用的
[解决办法]
我这个是三个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
}
}
[解决办法]
Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?
Timer肯定是要使用的
那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?