ビル
private bool m_isRunning = false;
Thread m_thread;
protected override void OnStart(string[] args)
{
try
{
m_thread = new Thread(StartService);
m_thread.Start();
m_isRunning = true;
}
catch (Exception ex)
{
if (m_logger != null)
{
m_logger.Error(ex, "An exception has occurred in the OnStart method call");
}
throw new Exception(ex.Message);
}
}
私のOnStopメソッドでは、次のコードを追加しました。
protected override void OnStop()
{
try
{
m_isRunning = false;
m_logger.Information("Application stopped.");
m_thread = null;
}
catch (Exception ex)
{
if (m_logger != null)
{
m_logger.Error(ex, "An exception has occurred in the OnStop method call");
}
throw new Exception(ex.Message);
}
}
以下に示すように、私は、StartServiceメソッドでループを設定します。
private void StartService()
{
try
{
InitializeLogger();
m_logger.Information("Application started.");
while (m_isRunning)
{
RunProcess();
}
}
catch (Exception ex)
{
if (m_logger != null)
{
m_logger.Error(ex, "An exception has occurred in the StartService method call");
}
throw new Exception(ex.Message);
}
}
RunProcess方法は、サービス業務を行い、それが完了したとき、それが原因StartServiceメソッドでwhileループに再び発射します。
これはすべて私が望んでいたように機能するようです。
ループ内で繰り返したいコードを置くのに間違っていますか?あなたのコードの構造を少なくとも見ていなくては難しいです。 OnStart()がタイムリーに返されるようにしたいだけです。 – itsme86
なぜ私は-3ダウン投票を得たのか不思議です。誰かが説明をコメントすることができれば、私はその質問で間違っていたものを、将来、やめさせることができます。どうも – EiEiGuy