Windows服务空闲

时间:2016-12-02 09:34:27

标签: c# .net timer windows-services

我在.net中开发了windows服务。它需要每5秒运行一次。当我安装并启动我的服务时,它运行良好。但经过一段时间(1或2天)后,需要花费太多时间甚至闲置。这是我的启动代码:

    protected override void OnStart(string[] args)
    {
        try
        {
            processThread = new Thread(new ThreadStart(this.InitTimer));
            processThread.Start();
        }
        catch (Exception failedtoStart)
        {
            DebugLog.LogAlert(failedtoStart.ToString(), 2);
        }
    }

    protected override void OnStop()
    {
        timer.Enabled = false;
    }

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        try
        {
            if (isStarted)
            {
                isStarted = false;
                [Some function]
                isStarted = true;
            }
        }
        catch (Exception ex)
        {
            DebugLog.LogAlert("Error: " + ex, 1);
        }
    }

    private void InitTimer()
    {
        try
        {
            timer = new System.Timers.Timer();
            timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
            timer.Interval = 5000;
            timer.Enabled = true;
            timer.Start();
        }
        catch (Exception ex)
        {
            DebugLog.LogAlert("Error: " + ex, 1);
        }
    }

如果我做错了什么,请纠正我。

1 个答案:

答案 0 :(得分:0)

我还不能发表评论。 查看代码,您希望每5秒运行一次功能,但不能同时运行。 您可以在运行函数之前禁用计时器,然后在此之后启用,而不是维护布尔值来验证当前正在运行的方法。

try
  {
        timer.Enabled = false;
        [Some function]
    }
    catch (Exception ex)
    {
        DebugLog.LogAlert("Error: " + ex, 1);
    }
    Finally{
        timer.Enabled = true;
    }

正如@Nawed Nabi Zada指出的,你应该重置旗帜事件,因为发生了异常。你的代码遗失了。