我有一個Web服務,我需要確保將完成處理,然後在onstop()被調用時退出。目前當onstop()被調用時,服務立即停止。我被告知查看ManualResetEvent和requeststop標誌。我到處找例子甚至發現其中的幾個:使用ManualResetEvent檢查服務是否已完成處理
How do I safely stop a C# .NET thread running in a Windows service?
To make a choice between ManualResetEvent or 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服務我很新。此服務需要在實際停止之前完成庫存更新。
只是一個問題@peter是你WebServiceProcessMethod我invprocessingchanges? – user1270384 2013-02-19 20:49:55
@ user1270384是的,我編輯了答案來反映這一點。 – 2013-02-19 22:01:26
請注意我的Onstop如何具有以下代碼protected override void OnStop() { _requestStop = true; timer.Dispose(); }它現在改變了還是你的代碼被包含在這? – user1270384 2013-02-19 22:26:44