zoukankan      html  css  js  c++  java
  • windows 服务循环任务.服务启动后无法停止重启的解决办法

    最近项目需要试用windows服务来监控一些数据的处理

    protected override void OnStart(string[] args)
    {

    while(true)
    {
    try
    {
    workflow.ProcessWorkFlowMQ();
    Thread.Sleep(150);
    }
    catch (Exception e1)
    {
    Logger.Error(e1.Message);
    }
    }
    }

    如上代码会造成 服务器安装成功后无法通过windows服务管理进行启动停止.比如说需要更换运行的服务器帐号就无法操作.

    分析原因是因为OnStart方法无法执行结束.造成的.所以需要使用多线程来处理

    OnStart方法内使用多线程 OnStop方法内部停止循环线程.测试通过服务可以正常启动停止.

    代码如下

    protected override void OnStart(string[] args)
    {

    Logger.Error("工作流监控信息启动!" + Environment.NewLine);
    thread = new Thread(new ThreadStart(StartProcess));//启用另外一个线程来处理业务.否则 OnStart方法执行不完.服务无法进行停止启动操作.
    thread.Start();

    }

    protected void StartProcess()
    {
    int i = 0;
    while (true)
    {

    try
    {
    workflow.ProcessWorkFlowMQ();
    Thread.Sleep(150);
    i = 0;
    }
    catch (Exception e1)
    {
    //Logger.Error(e1.Message);
    // i++;
    // Thread.Sleep(500 * i);
    // if (i == 200)
    // {
    // thread.Abort();
    // }
    }
    }
    }

    protected override void OnStop()
    {
    thread.Abort();
    }

  • 相关阅读:
    支付
    REST framework补充
    Django与Ajax
    Django 模型层ORM
    Django简介
    Web应用
    Docker配置pycharm连接
    Docker 网络扩展
    Docker 之Docker-Compose
    Docker 之Dockerfile
  • 原文地址:https://www.cnblogs.com/sky266/p/2347257.html
Copyright © 2011-2022 走看看