私はこのようないくつかのコードを維持しています。それは30分ごとにいくつかの作業を行うWindowsサービスです。 ActualWorkDoneHereメソッドの実行には約30秒かかりますが、実行中に停止していれば、状態が悪い状態になる可能性があります。それを防ぐ最善の方法は何ですか? onstopメソッドでfalseに設定されたブール値でWhile(true)を置き換えるべきです(スレッドAbort呼び出しを削除します)?スレッドがスリープ状態にあるかどうかを確認する方法はありますか?Windowsサービスで実行されているC#.NETスレッドを安全に停止するにはどうすればよいですか?
namespace WorkService
{
public partial class WorkService : ServiceBase
{
private Thread _workerThread = null;
public WorkService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_workerThread = new Thread(new ThreadStart(DoWork));
_workerThread.Start();
}
protected override void OnStop()
{
_workerThread.Abort();
}
static void DoWork()
{
int sleepMinutes = 30;
while (true)
{
ActualWorkDoneHere();
System.Threading.Thread.Sleep(new TimeSpan(0, sleepMinutes, 0));
}
}
}
}
これは、タスクスケジューラのための仕事のように見えるの内側にこれを試してみてください! :) –
@Gregスケジュールでタスクスケジューラを実行しませんか?この場合、Stimyは30分間停止してから再度実行し、30分ごとに実行しないようにしています。 – Junto