OnStart 関数は、実行に時間がかかるロジックの場所ではありません。基本的に、OnStart 関数の外側にロジック用のクラスを作成する必要があります。エントリ関数、つまりデータを取得して処理を開始する関数を公に宣言する必要があります。
例えば
class ProcessingClass()
{
public void ThreadStartProc()
{
GetData();
StartProcessing();
}
}
onStart メソッドで、新しい Thread を作成し、ThreadStart を ThreadStartProc 関数に設定します。例えば
Thread ProcessingThread;
ProcessingClass procClass = new ProcessingClass();
protected override void OnStart(string[] args)
{
ProcessingThread = new Thread(new ThreadStart(procClass.ThreadStartProc));
ProcessingThread.Start();
}
protected override void OnStop()
{
if (ProcessingThread != null)
{
ProcessingThread.Abort();
ProcessingThread.Join();
ProcessingThread = null;
}
}
処理クラスでは、サービスが停止したときにスローされる ThreadAbortException を処理する必要があります。