2011-06-23 9 views
5

To jest mój pierwszy raz, gdy pracuję z usługą Windows i uczę się jak idę. Używam VS 2010, Windows 7, aby utworzyć usługę Windows, która będzie mieć licznik czasu. Mam google i przeglądać tę stronę, jak również Use of Timer in Windows Service, Best Timer for using in a Windows service ale nadal jestem mylić, gdzie kodować timer w składniku usługa WindowsDodawanie System.Threading.Timer do usługi Windows w VS 2010

Mam onStart sposób i metodę OnStop w klasie service1.cs
Gdzie powinienem kodować timer, aby uruchomić funkcję (NIE rozpoczynać usługi Windows)?

+0

Czy rzeczywiście mówić o * zaczynając * usługa lub okresowe wykonywanie niektórych funkcji * * w ciągu swojej służby? –

+0

Okresowe wykonywanie funkcji w ramach usługi – user788487

Odpowiedz

6

Poniżej znajduje się przykład tego, jak to zrobić. Zapisuje on komunikat w dzienniku aplikacji (jak widać w Podglądzie zdarzeń) co 10 sekund, aż usługa zostanie zatrzymana. W twoim przypadku umieść okresową logikę w metodzie OnElapsedEvent().

private System.Timers.Timer _timer = new System.Timers.Timer(); 

protected override void OnStart(string[] args) 
{ 
    _timer.AutoReset = true; 
    _timer.Interval = 10000; // 10 seconds 
    _timer.Elapsed += OnElapsedEvent; 
    _timer.Start(); 
} 

protected override void OnStop() 
{ 
    _timer.Stop(); 
} 

private void OnElapsedEvent(object sender, ElapsedEventArgs e) 
{ 
    // Write an entry to the Application log in the Event Viewer. 
    EventLog.WriteEntry("The service timer's Elapsed event was triggered."); 
} 

Mam kilka szczegółowych odpowiedzi tutaj w SO, które mogą być pomocne, gdy zaczniesz pracować z usługami systemu Windows.

+0

Bardzo dziękuję Matt. To było to, czego potrzebowałem. – user788487

4

Czy łatwiej byłoby użyć zaplanowanego zadania do uruchomienia niewielkiej aplikacji konsolowej lub podobnej, zamiast radzić sobie z różnymi niuansami, które może przynieść usługa systemu Windows?

Jeśli nie, być może trzeba przejrzeć normalny artykuł na temat pisania usług Windows, takich jak this c# article lub this VB Article. Gdy zobaczysz, jak działa normalna usługa (usługa, która nie korzysta z licznika czasu), powinieneś wiedzieć, gdzie dodać kod czasowy.

Nadzieja, która pomaga?

+0

Zaplanowane zadania, które działają przez kilka godzin (w moim przypadku 9 godzin) wydają się być obcięte krótko. Nie wiem, czy błąd w kodzie lub problem z Task Scheduler. Ale ta alternatywa będzie pomocna. Ops tutaj, gdzie pracuję jest dobry z albo. Ale mogą być decydującym czynnikiem. – TamusJRoyce

+0

@TamusJRoyce 4-letnia nitka; daj mi znać, jeśli masz jakieś pytania (lub lepiej, tę samą nazwę użytkownika na Twitterze). Powodzenia. – Smudge202

Powiązane problemy