2012-01-22 2 views
0

У меня возникли проблемы с попыткой выяснить, как смотреть папку для изменений. Это, как далеко я получил:Watch Folder in VB.net/WPF

Class MainWindow 

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _ 
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
    Dim Path As String = "C:\Temp" 

    ' Create a new FileSystemWatcher and set its properties. 
    Dim watcher As New FileSystemWatcher() 
    watcher.Path = Path 
    ' Watch for changes in LastAccess and LastWrite times, and 
    ' the renaming of files or directories. 
    watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName) 
    ' Only watch text files. 
    watcher.Filter = "*.txt" 

    ' Add event handlers. 
    AddHandler watcher.Changed, AddressOf OnChanged 
    AddHandler watcher.Created, AddressOf OnChanged 
    AddHandler watcher.Deleted, AddressOf OnChanged 
    AddHandler watcher.Renamed, AddressOf OnRenamed 

    ' Begin watching. 
    watcher.EnableRaisingEvents = True 

End Sub 

' Define the event handlers. 
Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs) 
    ' Specify what is done when a file is changed, created, or deleted. 
    MsgBox("File: " & e.FullPath & " " & e.ChangeType) 
End Sub 

Private Shared Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs) 
    ' Specify what is done when a file is renamed. 
    MsgBox("File: {0} renamed to {1}", e.OldFullPath, e.FullPath) 
End Sub 
End Class 

Проблема заключается в том, когда происходит изменение в папке программа выходит с без кода ошибки. Я прочитал несколько связанных должностей, и я знаю, что это связано с безопасностью потоков. Однако я не знаю, как сделать эту программу «потоковой безопасностью». Может ли кто-нибудь дать мне совет? Благодаря!

+0

Сбои с чем? Нулевая ссылка? –

+0

Нет извинения, что он не «сбой» как таковой, программа просто выходит без сообщения об ошибке – qu1ckdry

+0

Чтобы уловить эту ошибку в будущем, установите «Перерыв при вызове исключения» на «исключениях времени выполнения общего языка» в Исключения ... в меню отладки в Visual Studio. – perfectionist

ответ

3

У меня здесь нет проблем с безопасностью. Я думаю, что проблема:

MsgBox("File: {0} renamed to {1}", e.OldFullPath, e.FullPath) 

должен быть

MsgBox(String.Format("File: {0} renamed to {1}", e.OldFullPath, e.FullPath)) 
+0

Очевидно, это может повлиять только на переименования. Если это не решит проблему, укажите, какое действие вы выполняете в файлах временного каталога, в случае, если это влияет на проблему. – perfectionist

+0

Эй, спасибо за это изменение, теперь он работает без выхода на переименование! Не могу поверить, что я не обратил на это внимания. Также я только тестировал функцию переименования кода, который я проверил, и другие обработчики работают. – qu1ckdry