Imports System.IO Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.Data.SQLite Public Class Service1 #Region "+++++ Variablen +++++" Public Shared _windream As New clsWindream_allgemein Public Shared threadRunner As BackgroundWorker Public Shared WDLaufwerk As String Public Shared _PROFIL_ID As Integer Dim _INTERVALL As Integer 'Variablen für Dateiimporter #End Region #Region "+++++ Start Stop Events +++++" Protected Overrides Sub OnStart(ByVal args() As String) ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge ' ausführen, damit der Dienst gestartet werden kann. ' Code zum Starten des Dienstes hier einfügen. Init() End Sub Sub Init() Try ClassLogger.Init(My.Application.Info.DirectoryPath & "\Log", "logService_") ClassLogger.Add(" ", False) ClassLogger.Add("## WindreamResultHandler Init-Phase - " & Now & " ## ", False) If My.Settings.SQliteConnection = String.Empty Then ClassLogger.Add("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.", True) Exit Sub Else If clsSQLITE.Init = False Then ClassLogger.Add("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQliteConnection & "' hergestellt werden!", True) Exit Sub Else '### Thread für Durchlauf generieren Service1.threadRunner = New BackgroundWorker() Service1.threadRunner.WorkerReportsProgress = True Service1.threadRunner.WorkerSupportsCancellation = True AddHandler threadRunner.DoWork, AddressOf RUN_THREAD AddHandler threadRunner.RunWorkerCompleted, AddressOf Thread_Completed '### Den Timer generieren Dim Timer_Durchlauf As New System.Timers.Timer() 'Das Event hinterlegen welches bei "Tick" ausgelöst wird AddHandler Timer_Durchlauf.Elapsed, AddressOf Thread_Run ' Set the Interval Timer_Durchlauf.Interval = clsSQLITE.konf_intervall * 60000 ClassLogger.Add("- Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) Timer_Durchlauf.Enabled = True ClassLogger.Add("- Timer gestartet", False) ' Und den Durchlauf das erste Mal starten threadRunner.RunWorkerAsync() End If End If Catch ex As Exception ClassLogger.Add(ex.Message, True, "Service Init") End Try End Sub Public Shared Sub Thread_Run() If Not threadRunner.IsBusy Then threadRunner.RunWorkerAsync() End If End Sub Protected Overrides Sub OnStop() ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen. ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen. ClassLogger.Add("", False) ClassLogger.Add("## WindreamResultHandler wurde gestoppt - " & Now & " ## ", False) ClassLogger.Add("", False) End Sub Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Try ClassLogger.Init(My.Application.Info.DirectoryPath & "\Log", "logService_") ClassLogger.Add("", False) ClassLogger.Add("## Start Durchlauf WindreamResultHandler - " & Now & " ## ", False) ClassLogger.Add("", False) 'windream initialisieren If _windream.Init() = True Then 'Zur sicherheit die DB nochmal initialiseren If clsSQLITE.Init() = True Then Dim DT As DataTable = clsSQLITE.Return_Datatable("SELECT GUID FROM TBPROFIL WHERE AKTIV = 1 order by REIHENFOLGE") For Each DR As DataRow In DT.Rows _PROFIL_ID = CInt(DR.Item("GUID")) 'Und nun das Profil durchlaufen If clsProfil.Init(_PROFIL_ID) = True Then clsProfil.Profil_Durchlauf() End If Next clsSQLITE.Execute_non_Query("UPDATE TBKONFIGURATION SET LAST_TICK = DATETIME ('now' , 'localtime') WHERE GUID = 1") End If End If Catch ex As Exception ClassLogger.Add(ex.Message, True, "RUN_THREAD") End Try End Sub #End Region #Region "*** BackgroundWorker DI und NI beenden und Abbrechen ***" Private Shared Sub Thread_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted ' This event fires when the DoWork event completes Try Dim result As String = "" If e.Cancelled Then ClassLogger.Add("## Der Dateiimport wurde durch den Anwender abgebrochen", False) ElseIf e.Error IsNot Nothing Then ClassLogger.Add("Fehler bei Durchlauf. Der Vorgang wird abgebrochen.", True, "Thread_Completed") ClassLogger.Add(e.Error.Message, True, "Thread_Completed") End If 'If DI_Verzeichnisloeschen Then ' Try ' My.Computer.FileSystem.DeleteDirectory(DI_Quellordner, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty) ' Catch ex As Exception ' ClassLogger.Add("ACHTUNG: Der Vorgang wurde abgeschlossen. Das Quellverzeichnis konnte jedoch nicht gelöscht werden, da sich in dem Ordner noch Dateien/Verzeichnisse befinden.", False) ' End Try 'End If Catch ex As Exception ClassLogger.Add(ex.Message, True, "Thread_Completed") End Try End Sub Public Shared Function Thread_Abbrechen() Try If Service1.threadRunner.IsBusy Then Service1.threadRunner.CancelAsync() End If Return True Catch ex As Exception ClassLogger.Add(ex.Message, True, "Thread_Abbrechen") Return False End Try End Function #End Region End Class