我有一个 Web 服务,我需要确保在调用 onstop() 时完成处理然后退出。当前,当调用 onstop() 时,服务会立即停止。我被告知要查看 ManualResetEvent 和 requeststop 标志。我到处寻找示例,甚至发现了其中的一些:
如何安全地停止在 Windows 服务中运行的 C# .NET 线程?
在 ManualResetEvent 或 Thread.Sleep() 之间做出选择
http://www.codeproject.com/Articles/19370/Windows-Services-Made-Simple
但是我很难理解哪一个最适合我的情况。
下面的代码:
System.Timers.Timer timer = new System.Timers.Timer();
private volatile bool _requestStop = false;
private static readonly string connStr = ConfigurationManager.ConnectionStrings["bedbankstandssConnectionString"].ConnectionString;
private readonly ManualResetEvent _allDoneEvt = new ManualResetEvent(true);
public InvService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_requestStop = false;
timer.Elapsed += timer_Elapsed;
double pollingInterval = Convert.ToDouble(ConfigurationManager.AppSettings["PollingInterval"]);
timer.Interval = pollingInterval;
timer.Enabled = true;
timer.Start();
}
protected override void OnStop()
{
_requestStop = true;
timer.Dispose();
}
protected override void OnContinue()
{ }
protected override void OnPause()
{ }
private void timer_Elapsed(object sender, EventArgs e)
{
if (!_requestStop)
{
timer.Start();
InvProcessingChanges();
}
}
private void InvProcessingChanges()
{
//Processes changes to inventory
}
有没有经验丰富的windows服务的人可以帮助我?我刚刚完成了我的第一个工作服务,对 Windows 服务还很陌生。此服务需要在实际停止之前完成发送库存更新。