在不使用计时器的情况下创建Windows服务

时间:2018-07-24 12:44:20

标签: c# windows service

美好的一天,

因此,首先,我发现了一些与此相关的问题,但不是我要寻找的问题
-Prevent Windows service manager from stopping a service c#
-Keep a Windows Service running without a timer

我真正在寻找的是一种使服务保持运行状态的方法,而不必在其中放置任何有趣的东西(蜘蛛的正常现象-实在太麻烦了)。

因此,要分解我正在设计的系统的结构,下面是一些背景信息:
有一个在后台运行的服务。该服务将保存以指定间隔执行处理的对象。这些对象是不同类型的流程(即报告,处理等),它们均以不同的间隔启动。这个想法是,将有一个应用程序使用ServiceBase.OnCustomCommand(int cmd)将值传递给服务,其中这些命令将转换为“暂停”,“开始”,“重新启动”和其他对象查询,以确定处理是否成功/完成。某个队列。因此,换句话说,我正在并行运行“不同的处理器”,并且取决于进程,它允许处理/并行运行多个文件或任务。

我尝试运行此服务,但是即使我将CanStop属性设置为false,它也会每次自行停止。在调试中(使用编译器if),我能够确定该服务永不崩溃,而是运行了一次,然后在OnStart方法结束时,执行终止。
< br />

所以回到问题所在,如何允许该服务在后台继续运行而不必在服务内部设置废话计时器?


某些代码
服务

public override void OnStart(string[] args)
{
    try {
       double interval = double.Parse(ConfigurationManager.AppSettings["Interval"]);
       fileProc = new FileProcessor(interval);
    }
    catch(Exception ex) {
       fileProc = new FileProcessor(180000); // global variable
    }
}


文件处理器

public FileProcessor(double interval)
{
    pauseTimer = null;
    runTimer = new System.Timers.Timer()
    {
        AutoReset = true,
        Enabled = true,
        Interval = interval
    };
    runTimer.Elapsed += FileProcessor_OnRun;
    OnPause += FileProcessor_OnPause;
    runTimer.Start();
    IsRunning = true;
}

在此先感谢您的帮助。

0 个答案:

没有答案