.NET Windows サービスを作成し、bin/debug フォルダーからデバッグ リリースをインストールしました (はい、これが適切な方法ではないことはわかっていますが、テストしてデバッガーをアタッチできるようにしたいだけです)。
このサービスは基本的に、FTP ディレクトリでファイルをチェックし、それらを処理し、1 分間スリープしてからループする無限ループで実行されます。
サービスを開始しようとすると、次のエラーが表示されます
Error 1053: The service did not respond to the start or control request in a timely fashion
さらに調査すると、サービスは最初のループを完了し、最初のスレッドのスリープ中にタイムアウトします。そのため、どのようにサービスを開始すればよいかについて、やや混乱しています。これを引き起こしているのは、スレッド化に対する私の (欠如した) 理解ですか?
私のスタートコードは
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("Service started");
ThreadStart ts = new ThreadStart(ProcessFiles);
workerThread = new Thread(ts);
workerThread.Start();
}
ProcessFiles 関数では、ループが完了したら、単純に
eventLog.WriteEntry("ProcessFiles Loop complete");
Thread.Sleep(new TimeSpan(0,1,0));
イベント ログを確認すると、'ProcessFiles Loop complete' ログがありますが、これはサービスがタイムアウトする前の最後のイベントであり、開始に失敗します。
誰かが私が間違っていることを説明できますか?
編集
ProcessFiles 関数でループを処理する方法は次のとおりです。
while (!this.serviceStopped)
{
// Do Stuff
eventLog.WriteEntry("ProcessFiles Loop complete");
Thread.Sleep(new TimeSpan(0,1,0));
}
乾杯
スチュワート