Naivan azt gondolhatnánk, hogy ha egy Timer komponenst használunk a szolgáltatásunkban az működni fog. Pedig nem. A .Net rendelkezik pár Timer osztályal számunkra most kettő érdekes (az ismertetés csak felületes, akit érdekel nézze meg msdn-en ügyesen):
System.Threading.Timer: mint neve is mutatja külön szálat hoz létre, és az végzi az üzemezést
System.Windows.Forms.Timer: ezt használja a gui, azon keresztül történik az ütemezés
A feladat csak annyi, hogy amikor a szolgáltatásunk elindul, eldöntsük azt melyiket is kell használnunk. Célszerű erre egy burkoló osztályt létrehozni, ami a külső használók elöl elrejti, hogy milyen timer is működik a háttérben valójában.
Az én implementációm nagyon egyszerű, egy szempont volt: működjön. Letölthető itt.