名位大侠好:
    本人要做一个服务,每天监视时间,如果时间到了上午十点以后就做一些操作SQL数据库的事情。
    我在服务里面写了while(true)循环,加了这个WHILE循环后服务启动就报<错误1053:服务并未及时响应启动或控制请求>不加这个就可以启动。
    我用程序做 是可行的。

解决方案 »

  1.   

    你把代码写在Service Start事件里面去了吧?无限循环不能写在这个方法中,否则会导致Start动作长时间无法结束,最终导致错误1053:服务并未及时响应启动或控制请求。你应该在Start事件中启用另外一个线程进行循环处理,这样就不至于阻塞服务的启动动作。
      

  2.   

    服务的OnStart方法需要在一定时间内返回,不然就会发生你说的这种情况。所以一般都在OnStart里新开一个线程执行代码。你把代码移动到那个线程里就好了。
      

  3.   

    顶,对的,用TIMER应该好实现,定时间触发数据提交事件
      

  4.   

    另外,尽量不要用while(true)这样做循环,使用Timer来处理会更好。
      

  5.   

    protected override void OnStart(string[] args)
    {
    // TODO: 在此处添加代码以启动服务。
    int temp=1;
    System.Threading.Timer tm=new Timer(new TimerCallback(KS),this,1800,1800);
    }
    我这样写可以吧
      

  6.   

    protected override void OnStart(string[] args)
    {
    // TODO: 在此处添加代码以启动服务。
    System.Threading.Timer tm=new System.Threading.Timer(new TimerCallback(KS),this,0,1800)}
    用了这个用程序做隔几秒就出来了,可用到服务上去就不行到了规定的时间不运行
      

  7.   


    注意你把System.Threading.Timer tm声明为一个局部变量,这将导致tm在OnStart方法结束的时候被放入可回收列表(GC列表)。尽管tm仍在运行,但由于该对象已经不再被引用,它将会在任意时刻被CLR所回收(摧毁),相关的线程代码也将不再运行。要想Timer能够正常执行,你需要保持一个引用。建议你改成这样:private System.Threading.Timer tm = null;
    protected override void OnStart(string[] args) 
    {   tm = new System.Threading.Timer(new TimerCallback(KS),this,0,1800);} 
    另外,在服务停止的时候,一定也要写相应的代码去停止timer,可以调用tm.Dispose();方法来做到这一点。最后,System.Threading.Timer这个类是个轻量级的类,如果想要开发服务程序,要更多的定时功能和事件支持,我建议你用System.Timers.Timer。
      

  8.   

    如果时间到了上午十点以后就做一些操作SQL数据库的事情。
    为什么不直接在数据库里定制一个任务、定时执行呢?
      

  9.   

    12楼,其实这是一个被问烂了的问题了。最简单稳定的办法往往是使用系统已经提供的功能,比方说用SQL Server的话可以用SQL Agent Job,哪怕用Access,也可以用Windows计划任务来排程。如果是要做成熟的项目,最好还是用久经考验的解决方案。不过从学习软件开发技术上来讲,了解一下如何自己去实现同样的功能也没啥坏处。