当前位置:编程学习 > C#/ASP.NET >>

关于windows服务中的轮询(急)

用C#(.net)建了一个windows service的工程,并完成了这个服务程序,执行都正常,但我希望能10分钟执行一次,不知如何写?网上查到,可以加入Timer,用它来进行轮询,但我在onStart()事件中加入了timer1.Enabled = true;当然在onStop()事件中加入了timer1.Enabled = false;
服务可以运行,但并没有轮询,为何?应该怎么写呢?
请指教! --------------------编程问答-------------------- ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_radcon/html/e24d8a3d-edc6-485c-b6e0-5672d91fb607.htm --------------------编程问答-------------------- 谢谢,但上楼上的网站,我打不开呀:( --------------------编程问答-------------------- 首先Timer控件要用System.Timers下的Timer控件,大概代码如下:
onStart()
{ timer1.Enabled = true; }

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  timer1.Enabled = false;

  try
  {
     // 把你的逻辑类写在这里
  }
  catch(Exception exobj)
  {  // 这里做异常处理 }
  finally
  { timer1.Enabled = true; }
} --------------------编程问答-------------------- 多谢
timer1_Elapsed这个事情是什么时候会被调用的呢? --------------------编程问答-------------------- 服务不是都写在protected override void OnStart(string[] args){}
这个方法里吗? --------------------编程问答-------------------- like
public class StatService : System.ServiceProcess.ServiceBase
{
 private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{

    timer = new System.Timers.Timer(int.Parse(System.Configuration.ConfigurationSettings.AppSettings["AcceptTime"].ToString()));
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer.Enabled = true;

}

  void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //doing somethind;
        }
}
--------------------编程问答-------------------- 用线程,然后sleep 600000s --------------------编程问答-------------------- 用 Thread 的 time --------------------编程问答-------------------- 这个拖进来是一个system.windows.forms.timer
服务应用程序设计为长时间运行。因此,它通常轮询或监视系统中的情况。监视是在 OnStart 方法中设置的。但是,OnStart 实际上不进行监视。服务的操作开始之后,OnStart 方法必须返回到操作系统。它不能始终循环或阻止。若要设置简单的轮询机制,可以使用 System.Timers.Timer 组件。在 OnStart 方法中,可以设置组件上的参数,然后将 Enabled 属性设置为 true。然后,计时器将在代码中周期性地引发事件,此时,服务可以进行其监视工作。
  微软这样说的,哪位有过这方面的经验。说下用什么,谢谢

--------------------编程问答-------------------- 服务是没有 Forms 的吧?

服务有窗体?服务都是没有界面的。 --------------------编程问答-------------------- 请看我的文章:http://blog.csdn.net/haukwong/article/details/7022628


    public partial class Service : ServiceBase
    {
        public Service()
        {
            InitializeComponent();
        }
        protected override void OnStart(string[] args)
        {
            EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述
            writestr("服务启动");//自定义文本日志
            System.Timers.Timer t = new System.Timers.Timer();
            t.Interval = 1000;
            t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件; 
            t.AutoReset = true;//设置是执行一次(false)还是一直执行(true); 
            t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; 
        }
        /// <summary>
        /// 定时检查,并执行方法
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)
        {
            int intHour = e.SignalTime.Hour;
            int intMinute = e.SignalTime.Minute;
            int intSecond = e.SignalTime.Second;
           
            if (intHour == 13 && intMinute == 30 && intSecond == 00) ///定时设置,判断分时秒
            {
                try
                {
                    System.Timers.Timer tt = (System.Timers.Timer)source;
                    tt.Enabled = false;
                    SetInnPoint();
                    tt.Enabled = true;
                }
                catch (Exception err)
                {
                    writestr(err.Message);
                }
            }
        }
        //我的方法
        public void SetInnPoint()
        {
            try
            {
                writestr("服务运行");
                //这里执行你的东西
    Thread.Sleep(10000);
            }
            catch (Exception err)
            {
                writestr(err.Message);
            }
        }
        ///在指定时间过后执行指定的表达式
        ///
        ///事件之间经过的时间(以毫秒为单位)
        ///要执行的表达式
        public static void SetTimeout(double interval, Action action)
        {
            System.Timers.Timer timer = new System.Timers.Timer(interval);
            timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
            {
                timer.Enabled = false;
                action();
            };
            timer.Enabled = true;
        }

        public void writestr(string readme)
        {
            //debug==================================================
            //StreamWriter dout = new StreamWriter(@"c:/" + System.DateTime.Now.ToString("yyyMMddHHmmss") + ".txt");
            StreamWriter dout = new StreamWriter(@"c:/" + "WServ_InnPointLog.txt", true);
            dout.Write("/r/n事件:" + readme + "/r/n操作时间:" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
            //debug==================================================
            dout.Close();
        }
        protected override void OnStop()
        {
            writestr("服务停止");
            EventLog.WriteEntry("我的服务停止");
        }
    }
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,