【发布时间】:2019-05-07 07:41:03
【问题描述】:
我使用 Visual Studio 创建了一个 Windows 服务项目。此服务应在后台运行并每 X 秒轮询一次数据。轮询是通过计时器和滴答事件来实现的。因此,每当引发滴答事件时,服务都应该做一些事情。
很遗憾,服务会自行关闭,因为它没有等待计时器计时。 OnStart 方法被执行并运行,但之后服务会自行关闭。
我在我的程序文件中添加了调试模式
private static void Main()
{
#if DEBUG
new RuntimeService().RunDebugMode();
#else
ServiceBase.Run(new RuntimeService());
#endif
}
并将此代码用于我的服务应用程序
public partial class RuntimeService : ServiceBase
{
private const int BATCH_POLLING_INTERVAL = 3000;
private Timer batchPollingTimer;
public RuntimeService()
{
InitializeComponent();
}
public void RunDebugMode()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
try
{
// ...
batchPollingTimer = new Timer(BATCH_POLLING_INTERVAL);
batchPollingTimer.Elapsed += OnTimer;
batchPollingTimer.Enabled = true;
}
catch (Exception exception)
{
throw exception;
}
}
protected override void OnStop()
{
batchPollingTimer.Enabled = false;
try
{
// ...
}
catch (Exception exception)
{
throw exception;
}
}
private void OnTimer(object sender, ElapsedEventArgs e)
{
batchPollingTimer.Enabled = false;
// ...
batchPollingTimer.Enabled = true;
}
}
如何在不关闭服务并等待计时器计时的情况下运行服务? “关闭自身”是指执行 Main 方法并忽略计时器。如果您需要更多信息,请告诉我。
【问题讨论】:
-
“不幸的是服务关闭了”,你的意思是服务被关闭了?通过它自己?容错配置重启?服务是否在 sys 日志中遇到错误?还是Service在打勾前退出调试模式?
-
“关闭自身”是指执行 Main 方法并忽略计时器
标签: c#