2012-01-22 9 views
0

フォルダの変更を監視する方法を試してみるのに問題があります。これは私が持っているところまでです: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

明らかにこれはRenamesにのみ影響します。これで問題が解決しない場合は、問題に影響を与える可能性がある場合に備えて、tempディレクトリのファイルに対して実行している処理を示してください。 – perfectionist

+0

名前変更で終了せずにこの変更を行っていただきありがとうございます。私はこれを見落としたとは思えません。また、私はチェックしたコードのリネーム機能をテストしていただけで、他のハンドラは動作しています。 – qu1ckdry

関連する問題