' **********************************************************************

' * Klasse:    cCreateFileWatcherAsync                                 *

' * Autor:     Dipl.-Ing. Hardo Naumann                                *

' * Datum:     13.07.2017                                              *

' * Update:    21.07.2017                                              *

' * Sprache:   Visual BASIC .NET                                       *

' **********************************************************************

 

Imports System.IO

Imports System.ComponentModel

 

''' <summary>

''' Stellt ein FileSystemWatcher-Objekt asynchron (blockierungsfrei) zur Verfügung

''' </summary>

''' <remarks>

''' Der FileSystemWatcher von .NET kann beim Setzen des zu überwachenden Pfades für ca. 40 Sekunden blockieren,

''' z.B. wenn das zu überwachende Verzeichnis auf einem FileServer liegt, der gerade nicht erreichbar ist.

''' Damit dann nicht die ganze Anwendung incl. GUI blockiert (hängt, einfriert),

''' wird dieser Vorgang mit dieser Klassse in einen separaten Thread ausgelagert.

''' Die gewünschten Parameter für das FileSystemWatcher-Objekt werden direkt im Konstruktor übergeben.

''' Im Event evReady liefert cCreateFileWatcherAsync entweder in Parameter fsw den betriebsbereiten FileSystemWatcher

''' oder in sErr einen Fehlermeldungstext, falls kein FileSystemWatcher erstellt werden konnte.

''' </remarks>

Public Class cCreateFileWatcherAsync

  Private m_sPath As String

  Private m_sFilter As String

  Private m_oNotifyFilters As NotifyFilters

  Private m_sErr As String

  Private WithEvents m_bgw As BackgroundWorker

  Private m_fsw As FileSystemWatcher

 

  Public Event evReady(ByVal sender As Object, ByVal fsw As FileSystemWatcher, ByRef sErr As String)

 

  Public Sub New(ByRef sPath As String, ByRef sFilter As String, ByVal oNotifyFilters As NotifyFilters)

    m_sPath = sPath

    m_sFilter = sFilter

    m_oNotifyFilters = oNotifyFilters

    m_bgw = New BackgroundWorker

    m_bgw.RunWorkerAsync()

  End Sub

 

  Private Sub m_bgw_DoWork(sender As Object, e As DoWorkEventArgs) Handles m_bgw.DoWork

    If Len(m_sPath) = 0 Then m_sErr = "No valid path was specified" : Return

    If Len(m_sFilter) = 0 Then m_sErr = "No valid filter was specified" : Return

    Try

      m_fsw = New FileSystemWatcher(m_sPath, m_sFilter)

      m_fsw.NotifyFilter = m_oNotifyFilters

      m_fsw.EnableRaisingEvents = True

    Catch ex As Exception

      m_sErr = ex.ToString

    End Try

  End Sub

 

  Private Sub m_bgw_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles m_bgw.RunWorkerCompleted

    RaiseEvent evReady(Me, m_fsw, m_sErr)

  End Sub

 

End Class

 

' *********************** end of file **********************************