2016-07-14 7 views
0

スレッドプログラミングが初めてで、最近スレッドに使用される問題が1つ割り当てられています。私はあなたの助けが最良の方法で問題を解決する必要があります。timerCallback関数でSQL接続エラーが発生したときにC#Windowサービスを停止します。

スレッドを作成するWindowサービスがあり、StartScheduler関数が呼び出されます。この関数はさらにスレッドを作成し、関数StartJobが呼び出されます。 StartJob関数でTimerCallbackオブジェクトが作成され、LoadandRunJob関数が50秒ごとに呼び出され、ジョブをロードして実行します。

注:上記で指定された各スレッドは別のクラスで作成されます。したがって、複数のクラスがあります。

私の要件は、SQL Serverの接続が切断され、関数LoadAndRunJobでエラーが発生したときにウィンドウサービスを停止することです。

サンプルコード

private void StartJob() 
{ 
    _timerCallback = new TimerCallback(LoadAndRunJob); 

    //Schedule the requery to happen every 50 seconds. 
    _timer = new Timer(_timerCallback, null, 50000, 50000); 
} 

private void LoadAndRunJob(Object state) 
{ 

    try 
    { 
     //Here is the code to load and execute the jobs 
    } 
    catch 
    { 
     //Require code here to stop the service 
    } 
} 

私が試したことの一つは、エラーをキャッチした後にイベントを発生させることです。イベントハンドラでサービスを停止しました。私はそれがそれを処理する最善の方法であるかどうかわかりません。

+0

これは私が正直に仕事で人と話し合うと何かです。質問する質問があります。たとえば、誰かにログを記録して警告するのではなく、サービスを停止する必要があるのはなぜですか?そのようなサービスは、通常、終了する前に何度か仕事をやろうとします。他の雇用が働いていて、就労していないのであれ –

+0

実際にSQL接続が切断された場合、サービスはタスクを実行することはできませんが、実行中と表示されます。そのため、クライアントは、SQL接続が何らかの理由で壊れた場合に、サービスを停止する必要があります。 –

答えて

0

多分これは役立ちます:

catch 
{ 
    new System.ServiceProcess.ServiceController("YourServiceName").Stop(); 
} 
関連する問題