Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Timer im Dienst

Empfohlene Antworten

Veröffentlicht

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

[EDIT] (-.-).. Es geht umVB.net :)

wie wärs mit Timer.Start() ? :)

Die Idee ist gut, hatte sie auch schon, erziehlt nur leider ebenso wenig einen Effeckt wie Timer.Enable :/

Besonders wundert mich eben, das der Timer in einer "normalen" Windows Anwendung so läuft wie ich es mir vorstelle.

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 -.-

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.

Benutze den 2. da der Windows.Forms im Dienst ja eh nicht funktionieren würde, oder? ^^


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.

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.