onstop()が呼び出されたときに処理を終了して終了することを確認する必要があるWebサービスがあります。現在、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サービスにまったく慣れていません。このサービスは、実際に停止する前に、インベントリの更新の送信を完了する必要があります。