私は、Windows サービスのマルチスレッド プロジェクトの途中にいます。正常に実行するには、皆さんからの入力が必要です。以下はコードで、私がやろうとしていることと問題を説明しています。
// I created a new thread and call MyTimerMethod() from the Main method.
private void MyTimerMethod()
{
timer = Timers.Timer(5000)
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Start();
// make this thread run every time.
Application.Run();
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
for(int i = 0; i < SomeNum; i++) //SomeNum > 0
ThreadPool.QueueUserWorkItem(WaitCallback(MyWorkingMethod),null);
}
private void MyWorkingMethod(object state)
{
// each thread needs to go and check the status and print if currentStatus = true.
// if currentStautus = true then that jobs is ready to print.
// FYI ReadStatusFromDB() from the base class so I cannot modify it.
ReadStatusFromDB(); // ReadStatusFromDB() contains jobs to be printed.
// after doing some work store procedure update the currentStatus = false.
//do more stuff.
}
要するに、プログラムは 5 秒ごとに実行され、他にやるべきことがあるかどうかをチェックします。存在する場合は、スレッドプールから新しいスレッドを作成し、キューにプッシュします。今私の問題は、キューに複数のスレッドがある場合です。currentStatus = false であっても、複数のスレッドが同じジョブを取得して印刷を試みます。
さらに情報が必要な場合はお知らせください。