これについては多くの投稿があり、すべて共通のソリューションを中心に展開しています。私はこのソリューションを使おうとしましたが、思ったほど信頼できるとは思いません。誰かが私が間違っていることを指摘したり、それをより完全な証拠にするための提案をしたりすることができたら、投稿してください!
状況:共有ネットワークフォルダの監視..ネットワークが失われると、filewatcherは監視しようとしていたものを失い、サービスが停止します。次のコードは機能しますが、常に機能するわけではありません。イベントは、FSのパスプロパティを設定しようとすると発生します。パスが見つからない場合(ネットワークがダウンしている場合)、例外がスローされます。私はそれを捕まえて、基本的にx時間寝て、もう一度やり直します。理想的には正常に動作するように聞こえますが、見た目ほど信頼性は高くありません:(
Protected Overrides Sub OnStart(ByVal args() As String)
fs1 = New FileSystemWatcher
fs1.Filter = My.Settings.MonitoringFilter
' fs1.NotifyFilter = NotifyFilters.LastWrite
fs1.Path = My.Settings.MonitoringDirNOSlash
' Add event handlers.
AddHandler fs1.Error, AddressOf WatcherError
fs1.EnableRaisingEvents = True
End Sub
Protected Sub WatcherError(source As Object, e As ErrorEventArgs)
fs1.Dispose()
fs1 = New FileSystemWatcher
Dim c As Integer = 0
While Not fs1.EnableRaisingEvents
Try
fs1.Filter = My.Settings.MonitoringFilter
fs1.Path = My.Settings.MonitoringDirNOSlash
AddHandler fs1.Error, AddressOf WatcherError
fs1.EnableRaisingEvents = True
Catch ex As Exception
c += 1
If c = 1 Then
ErrorReport(ex.Message)
End If
System.Threading.Thread.Sleep(5000)
End Try
End While
End Sub