C# で記述された Windows サービスがあります。内部にはタイマーがあり、定期的にいくつかの機能を起動します。だから私のサービスの骨格:
public partial class ArchiveService : ServiceBase
{
Timer tickTack;
int interval = 10;
...
protected override void OnStart(string[] args)
{
tickTack = new Timer(1000 * interval);
tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed);
tickTack.Start();
}
protected override void OnStop()
{
tickTack.Stop();
}
private void tickTack_Elapsed(object sender, ElapsedEventArgs e)
{
...
}
}
しばらくの間(10〜15日など)機能し、その後停止します。つまり、サービスは実行中と表示されますが、何もしません。私はいくつかのログを作成しましたが、問題はタイマーである可能性があります。これは、インターバル後に tickTack_Elapsed 関数が呼び出されないためです。
設定した時間だけ処理を停止する無限ループを使用して、タイマーなしで書き直すことを考えていました。これもエレガントな解決策ではなく、メモリに関していくつかの副作用があると思います。
タイマーは System.Timers 名前空間から使用され、環境は Windows 2003 です。別のサーバー上の 2 つの異なるサービスでこのアプローチを使用しましたが、どちらもこの動作を生成しています (これが、何らかの形で私のコードまたはコードに接続されていると考えた理由です)。フレームワーク自体)。
誰かがこの動作を経験しましたか? 何が間違っている可能性がありますか?
編集:
両方のサービスを編集しました。1 つはどこでも素晴らしい try-catch を取得し、より多くのログを記録しました。2 つ目は、定期的にタイマー レクリエーションを取得しました。その後、誰も停止していないので、この状況がさらに 1 週間続く場合は、この質問を閉じます。皆様、今までありがとうございました。
編集:
何も起こらなかったので、この質問を閉じます。いくつかの変更を加えたということですが、これらの変更はこの問題にはあまり関係がなく、それ以来、両方のサービスは問題なく実行されています。「関連性がなくなったためクローズ」としてマークしてください。