'
**********************************************************************
' * 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 **********************************