Mi pregunta es si esta es la mejor práctica para hacer esto. No pude encontrar ningún buen ejemplo. He siguiente código en el archivo creado por VS2005:cómo implementar el bucle de servicio de Windows que espera un período en C#/.NET2.0
public partial class ObjectFolder : ServiceBase
{
protected override void OnStart(string[] args)
{
ObjectFolderApp.Initialize();
ObjectFolderApp.StartMonitorAndWork();
}
protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop yourservice.
}
}
a continuación:
class ObjectFolderApp
{
public static bool Initialize()
{
//all init stuff
return true;
}
public static void StartMonitorAndWork()
{
Thread worker = new Thread(MonitorAndWork);
worker.Start();
}
private static void MonitorAndWork()
{
int loopTime = 60000;
if (int.TryParse(_cfgValues.GetConfigValue("OfWaitLoop"), out loopTime))
loopTime = 1000 * loopTime;
while (true)
{
/* create+open connection and fill DataSet */
DataSet ofDataSet = new DataSet("ObjectFolderSet");
using (_cnctn = _dbFactory.CreateConnection())
{
_cnctn.Open();
//do all kinds of database stuff
}
Thread.Sleep(loopTime);
}
}
}
El código anterior funciona como un amuleto. Estoy usando un servicio de Windows para verificar una cola. –
gracias! ... hmmm ... así que sugieres que ni siquiera llamo a ObjectFolderApp.Initialize(); en OnStart ?? Tiene que ser inicializado solo una vez. Otra pregunta es llamar a los métodos básicos anulados. ¿Porqué es eso? –
@matti: No sé qué estás haciendo en 'Initialize', por lo que es difícil de decir. Puede que aún lo necesite. En cuanto a llamar a los métodos base, no necesariamente tiene que hacerlo, pero como regla general, es una buena idea si lo que intenta hacer es * extender * la lógica de la clase base en lugar de * reemplazar * (que es la semántica deseada aquí). – Aaronaught