2009-03-16 27 views
19

変更のためにn秒ごとにフォルダをスキャンするWindowsサービスがあります。私はそれを起動しようとすると、 "サービスが開始コマンドにタイムリーに対応していない"というメッセージが表示されます。Windowsサービス:OnStartループ - 委任する必要がありますか?

私はそうのようなOnStartメソッドでオフに設定するループを持っている:

public void OnStart(string[] args) 
{ 
    while (!_shouldExit) 
    { 
     //Do Stuff 

     //Repeat 
     Thread.Sleep(_scanIntervalMillis); 
    } 
} 

は、エラーの原因をこのですか?私はこのメソッドを委譲すべきですか?

答えて

39

OnStartのみ開始作業する必要があります。それを行う責任はありません。これは、通常、実際の作業を行うために新しいスレッドを生成することを意味します。 OnStartは速やかに完了することが期待されます。例:

public void OnStart(string[] args) // should this be override? 
    { 
     var worker = new Thread(DoWork); 
     worker.Name = "MyWorker"; 
     worker.IsBackground = false; 
     worker.Start(); 
    } 
    void DoWork() 
    { 
     // do long-running stuff 
    } 
+0

サービスが終了すると、スレッドはどうなりますか? – JSideris

+0

@Bizorkeあなたが突然終了する場合、それは単純に途中で中断され、プロセスを終了するのと同じです。あなたが "停止"を意味するならば、あなたのコードが何をするかを指示してください。 –

+0

@MarcGravellそのワークが特定されていますか?バックグラウンドは偽ですか?したがって、スレッドはフォアグラウンドスレッドですか? – Thomas

6

OnStartメソッドはブロックしないでください。ジョブを実行するワーカースレッドを生成する必要があります。 FileSystemWatcherクラスを見て、ファイルシステムの変更通知をスキャンすることもできます。

関連する問題