У меня есть служба Windows, которая переопределяет методы OnStart и OnStop для вызова библиотеки классов.Я использую модель производителя / потребителя (см. http://www.albahari.com/threading/part4.aspx#_Wait_Pulse_Producer_Consumer_Queue, где я понял идею / логику).
У меня проблема в том, что по какой-то причине действие не выполняется правильно.Вот код «(System.) Action» (внутри timer_elapsed):
_queue.EnqueueItem(() =>
{
BuildFile file = new BuildFile();
file.run();
_writer.WriteLine("Gets Here: {0}", DateTime.Now.ToString());
_writer.Flush();
});
Как вы, вероятно, видите, _writer - это, по сути, инструмент ведения журнала «отладки».Он ДОЛЖЕН записывать эту строку в файл всякий раз, когда он вызывается (служба Windows запускает таймер):
_timer.Interval = 30000; //(3600000)
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
_timer.Enabled = true;
Для теста ОЧЕНЬ первый вызов, который выполняется для BuildFile
, является простымвойти в базу данных:
public BuildFile()
{
logEntry("Success", "I'm Running...");
}
, но запись в журнале никогда не записывается (метод отлично работает в других местах).
Самая странная часть - когда я оборачиваю класс с помощью консольного приложения,работает отлично.Код точно такой же в Windows Service, но он просто не запускает BuildFile.
Кто-нибудь видел что-нибудь подобное?