Dienst mit Timer

22/08/2009 - 16:55 von Peter Haus | Report spam
Hallo Ng

Ich möchte einen Dienst erstellen, in dem ich Dateien in einem
bestimmten Verzeichnis bearbeite.
Die Namen der Dateien, die in ein bestimmtes Verzeichnis abgelegt
werden, möchte ich über den FileSystemWatcher() erhalten und in eine
Liste, zum nachfolgenden Bearbeiten, aufnehmen.
Die Liste möchte ich in einem Timer Event, in dem ich den Timer wàhrend
der Bearbeitungszeit ausschalte, abarbeiten.
In der OnStart Routine sollte man sich ja nicht lange aufhalten, da
initialisiere ich den Timer und den FileSystemwatcher.
Wo ich hànge ist der Timer, er funktioniert einfach nicht.
Kann mir jemand sagen warum?

Dank für Hilfe.
Peter

Hier der Source:
Dim _Timer As System.Timers.Timer
Protected Overrides Sub OnStart(ByVal args() As String)
Dim b As Boolean

Try
Debug.WriteLine("OnStart")
WritePrivateLogFile("Service Started ")

'_filePath = My.Settings.filePath
'_fileExtention = My.Settings.fileExtention
'Initialisieren des FileSystemWatcher Objekts
'b = InitFileInfo()

_Timer = New System.Timers.Timer
_Timer.Interval = 5000
AddHandler _Timer.Elapsed, AddressOf onTimeElapsed
'GC.KeepAlive(_Timer)
_Timer.Enabled = True
_Timer.BeginInit()
_Timer.Start()

Catch ex As Exception
WritePrivateLogFile(Date.Now.ToString & " Error: " &
ex.Message)
End Try
End Sub


Private Sub onTimeElapsed(ByVal source As Object, ByVal e As
ElapsedEventArgs)
WritePrivateLogFile("onTimeElapsed" & vbCrLf)
If _fileList IsNot Nothing AndAlso _fileList.Count > 0 Then
_Timer.Enabled = False
'bearbeiten der Dateien
WritePrivateLogFile("onTimeElapsed fileList.Count=" &
_fileList.Count)
_Timer.Enabled = True
End If
End Sub


Private Sub WritePrivateLogFile(ByVal sw As String)
Dim fs As New FileStream("c:\temp\WindowsService.txt",
FileMode.OpenOrCreate, FileAccess.Write)
Dim m_streamWriter As New StreamWriter(fs)

m_streamWriter.BaseStream.Seek(0, SeekOrigin.[End])
m_streamWriter.WriteLine(Date.Now.ToString & sw & vbLf)
m_streamWriter.Flush()
m_streamWriter.Close()
End Sub
 

Lesen sie die antworten

#1 Elmar Boye
22/08/2009 - 17:29 | Warnen spam
Hallo Peter,

Peter Haus schrieb:
Wo ich hànge ist der Timer, er funktioniert einfach nicht.

Hier der Source:
Dim _Timer As System.Timers.Timer
Protected Overrides Sub OnStart(ByVal args() As String)
Dim b As Boolean

_Timer = New System.Timers.Timer
_Timer.Interval = 5000
AddHandler _Timer.Elapsed, AddressOf onTimeElapsed
'GC.KeepAlive(_Timer)
_Timer.Enabled = True
_Timer.BeginInit()




Für den Timer fehlt das EndInit().
BeginInit...EndInit sind für die Design-Time Unterstützung,
wenn man ihn auf eine Formular etc. zieht, und sie müssen
in Paaren aufgerufen werden.
Du kannst hier den Aufruf ganz weglassen.

_Timer.Start()



Aber Du kannst ihn auch durch System.Threading.Timer ersetzen,
denn der Timers.Timer ist kapselt eben jenen und eine Design-Time
Unterstützung brauchst Du auch nicht.

Ein Vergleich der Timer Klassen:
http://msdn.microsoft.com/de-de/mag...us%29.aspx
"Comparing the Timer Classes in the .NET Framework Class Library"

(unten stehen tabellarisch die Möglichkeiten/Einschrànkungen)

Gruß Elmar

Ähnliche fragen