Imports System.IO 'Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.Data.SQLite Public Class DDWDResultHandler #Region "+++++ Variablen +++++" Public Shared _windream As New clsWindream_allgemein Public Shared threadRunner As BackgroundWorker Public Shared _PROFIL_ID As Integer Dim _INTERVALL As Integer 'Variablen für Dateiimporter #End Region Public Sub New() MyBase.New() InitializeComponent() If Not System.Diagnostics.EventLog.SourceExists("Windream Result Handler") Then System.Diagnostics.EventLog.CreateEventSource("Windream Result Handler", "DigitalData Log") End If 'EventLog1.Source = "Windream Result Handler" 'EventLog1.Log = "DigitalData Log" End Sub 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. 'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestartet") Try clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "logResultHandler_") clsLogger.Add(" ", False) clsLogger.Add("## WindreamResultHandler gestartet - " & Now & " ## ", False) If My.Settings.MyConnection = String.Empty Then clsLogger.Add("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.", True) Else If clsSQLITE.Init = False Then clsLogger.Add("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.MyConnection & "' hergestellt werden!", True) Else ' '### Thread für Durchlauf generieren DDWDResultHandler.threadRunner = New BackgroundWorker() DDWDResultHandler.threadRunner.WorkerReportsProgress = True DDWDResultHandler.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 = 60000 'ClassLogger.Add("- Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) Timer_Durchlauf.Enabled = True clsLogger.AddDetailLog("Timer gestartet") ' Und den Durchlauf das erste Mal starten threadRunner.RunWorkerAsync() End If End If Catch ex As Exception clsLogger.AddError(ex.Message, "OnStart") 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. 'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestoppt") clsLogger.Add("", False) clsLogger.Add("## WindreamResultHandler wurde gestoppt - " & Now & " ## ", False) clsSQLITE.Execute_non_Query("Update TBPROFIL SET Running = 1 WHERE GUID = " & clsProfil._profGUID) clsLogger.Add("", False) clsLogger.WriteLog() End Sub Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Try Dim notcompleted As Boolean = False clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "logResultHandler_") clsLogger.Add("", False) clsLogger.Add("## Start Durchlauf WindreamResultHandler - " & Now & " ## ", False) clsLogger.Add("", False) 'windream initialisieren If _windream.Init() = True Then clsLogger.AddDetailLog("windream vollumfänglich initialisiert!") '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") If DT.Rows.Count > 0 Then clsLogger.AddDetailLog("Anzahl der aktiven Profile: " & DT.Rows.Count.ToString) For Each DR As DataRow In DT.Rows _PROFIL_ID = CInt(DR.Item("GUID")) 'Und nun das Profil durchlaufen Dim initresult = clsProfil.Init(_PROFIL_ID) If initresult = True Then clsLogger.WriteLog() clsProfil.Profil_Durchlauf() ElseIf initresult = False Then clsLogger.Add("clsProfil konnte nicht initialisiert werden", True, "RUN_THREAD") notcompleted = True ElseIf initresult = 0 Then clsLogger.AddDetailLog("initresult: 0") notcompleted = True ElseIf initresult = 1 Then clsLogger.AddDetailLog("initresult: 1") notcompleted = True End If Next Else clsLogger.Add("- Keine aktiven Profile vorhanden", False) notcompleted = True End If clsSQLITE.Execute_non_Query("UPDATE TBKONFIGURATION SET LAST_TICK = DATETIME ('now' , 'localtime') WHERE GUID = 1") Else clsLogger.Add("- clsSQLLite konnte nicht initialisiert werden!", False) notcompleted = True End If Else clsLogger.Add("# Achtung: Windream-Init mit Fehlern beendet", False) notcompleted = True End If If notcompleted = True Then clsLogger.WriteLog() End If Catch ex As Exception clsLogger.AddError(ex.Message, "RUN_THREAD") End Try End Sub #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 clsLogger.Add("## Der Dateiimport wurde durch den Anwender abgebrochen", False) clsLogger.WriteLog() ElseIf e.Error IsNot Nothing Then clsLogger.Add("Fehler bei Durchlauf. Der Vorgang wird abgebrochen.", True, "Thread_Completed") clsLogger.Add(e.Error.Message, True, "Thread_Completed") clsLogger.WriteLog() 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 clsLogger.AddError(ex.Message, "Thread_Completed") End Try End Sub Public Shared Function Thread_Abbrechen() Try If DDWDResultHandler.threadRunner.IsBusy Then DDWDResultHandler.threadRunner.CancelAsync() End If Return True Catch ex As Exception clsLogger.AddError(ex.Message, "Thread_Abbrechen") Return False End Try End Function #End Region End Class