首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

C#实现定时任务,求解惑,该如何处理

2013-12-13 
C#实现定时任务,求解惑我用C#写了一个windows service,但是不知道怎么让其定时执行,还要使用Timer还是有其

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
    }
}

[解决办法]

引用:
Quote: 引用:

Timer肯定是要使用的

那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?
后台计时这种情况,你需要一直开网站或者项目才能执行,而写服务可以挂服务器上一直不停的执行。这就需要看你的项目需求了。
[解决办法]
引用:
Quote: 引用:

Timer肯定是要使用的

那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?


引用:
Quote: 引用:

Timer肯定是要使用的

那为什么不在后台页面记时呢?用服务和直接后台记时有什么优劣?


页面能用来记时的话,母猪都能上树了,B/S的定义就是浏览器与服务器的关系,浏览器不存在了,关系还能继续吗?  所以必须做成服务在服务器上运行,就算没有浏览器也会继续工作

热点排行