Zum Inhalt springen

Timer im Dienst


Gadric

Empfohlene Beiträge

Servus zusammen

Ich habe nun gestern den kompletten Tag rumprobiert und gesucht im Internet. Doch nirgends eine Lösung gefunden bisher.

Mein Problem.. Der Timer wird nicht ausgeführt im Dienst. Warum? Keine Ahnung. Der Code ist der gleiche wie in der OnStart Methode. Der Zeitintervall ist auf 10000MS gelegt.

Es soll also alle 10 Sekunden etwas in eine Datei geschrieben werden.

In OnStart steht auch Timer1.enabled = True.. aber, es passiert nichts.

Ein engl. Tutorial hab ich schon gelesen aber hilft leider bei meinem Problem auch nicht weiter.

Hat jemand vllt eine idee, oder einen Code bei dem der Timer_Tick 100% funktioniert?

Dazu kommt manchmal das Problem..

Wenn ich den Dienst installiert habe und starten will, kommt:

"Der Dienst "blubb" wurde gestartet und dann angehalten. Einige Dienste werden automatisch angehalten.." usw

Warum kommt das? Sowohl in OnStart, als auch in OnContinue sowie Timer_Tick ist was drin.

MfG

Gadric

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm.. Ich sehe nur einen unter "Komponenten" in der Toolbox.

Timer_Tick funktioniert nicht.. am Freitag hatte ich es aber kurz mit Addhandler TimerElapsed zum laufen gebracht. Hab aber wieder irgendwas geändert, das es nicht läuft. Aber eigentlich nur den Namen des Service -.-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich mache kurz ne grobe Zusammenfassung da ich nachher Schulung hab:

1. System.Windows.Forms.Timer

Die Ereignisse laufen Synchron zum Thread der Form auf der er definiert wurde.

2. System.Timers.Timer

Wird eher asynchron zum HauptThread ausgeführt, kann man aber auch mit SynchronizingObject wieder synchron machen [quasi der Allrounder]

3. System.Threading.Timer

Sozusagen die Umsetzung eigener Timer-Implementationen. Vollkommen asynchron und führt jedes Ereignis in nem speraten Thread aus. Bei dem wäre eine Container-Klasse mit allen Funktionen am günstigsten.

AFAIR müsste der Timer den du benutzt unter die erste Kategorie fallen. Ich hab mal irgendwo gelesen das der Windows.Forms.Timer nicht so toll sein soll - würde dir empfehlen mal den 2ten zu probieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen


Imports System.io

Imports System.Timers



Public Class MyService

  Dim theTimer As New System.Timers.Timer



  Protected Overrides Sub OnStart(ByVal args() As String)

    theTimer.Enabled = True


    'Timer event

    AddHandler theTimer.Elapsed, AddressOf onTimeElapsed


    'Interval auf 2 Minuten

    theTimer.Interval = 2000

    'Logfile schreiben

    write(DateTime.Now & " Dienst gestartet")


    'Timer am laufen halten

    GC.KeepAlive(theTimer)

  End Sub


  Protected Overrides Sub OnStop()

    'Beim stoppen Timer beenden

    theTimer.Enabled = False


    'Logfile schreiben

    write(DateTime.Now & " Dienst beendet")


  End Sub


  Private Sub onTimeElapsed(ByVal source As Object, ByVal e As ElapsedEventArgs)

    'Logfile schreiben

    write(DateTime.Now & " Event wird ausgeführt..")




    write(DateTime.Now & ".. Event wurde ausgeführt")



  End Sub


  'Logfile schreiben Methode

  Public Sub write(ByVal text)

    Dim fs As FileStream = New FileStream("C:\local_files\rssServerDienst.log", FileMode.OpenOrCreate)

    fs.Seek(0, SeekOrigin.End)


    Dim sw As StreamWriter = New StreamWriter(fs)


    sw.WriteLine(text)


    sw.Close()

    fs.Close()

  End Sub


End Class

Der komplette Code. Ich kann da nix falsches entdecken. Viell hab ich irgendwo beim Installer rumgefuscht und was kaputt gemacht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry das ich jetzt erst antworte - war doch noch ein stressiger Tag.

Änder mal

"theTimer.Enabled = True"

in

"theTimer.BeginInit()"

und

"theTimer.Enabled = False"

in

"thetimer.EndInit()"

Das ".Enabled" ruft das elapsed-Ereignis auf bzw ob er darauf reagieren soll. Aber AFAIR wird der Timer mit init gestartet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo,

kurze Zwischenfrage: Benutzt du zufällig Windows 2003 Server?

Wenn ja, ein Kollege hatte letztens einige Schwierigkeiten mit .Net Timer Typen unter diesem Betriebssystem. Die Umstellung auf System.Threading.Timer brachte den gewünschten Erfolg :) Kann leider keine genaueren Informationen dazu liefern, weil der Kollege jetzt längere Zeit unterwegs ist, aber vielleicht hilft dir der Hinweis ja ein wenig.

greetz

mep

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...