2011-01-17 12 views
2

VB.NET 2010で新しいファイルのフォルダを監視するための簡単なプログラムを作成しようとしていますが、何か問題があります。VB.net 2010のファイルアクティビティの問題監視ディレクトリ

Imports System.IO 

Public Class Main 
    Public fileWatcher As FileSystemWatcher 

    Sub btnGo_Click(sender As System.Object, e As System.EventArgs) Handles btnGo.Click 
     '//# initialize my FileSystemWatcher to monitor a particular directory for new files 
     fileWatcher = New FileSystemWatcher() 
     fileWatcher.Path = thisIsAValidPath.ToString() 
     fileWatcher.NotifyFilter = NotifyFilters.FileName 
     AddHandler fileWatcher.Created, AddressOf fileCreated 
     fileWatcher.EnableRaisingEvents = True 
    End Sub 

    Private Sub fileCreated(sender As Object, e As FileSystemEventArgs) 
     '//# program does not exit when I comment the line below out 
     txtLatestAddedFilePath.Text = e.FullPath 
     '//# e.FullPath is valid when I set a breakpoint here, but when I step into the next line, the program abruptly halts with no error code that I can see 
    End Sub 
End Class 

あなたが見ることができるように、私がクリックしたときにFileSystemWatcherを初期化するためのボタンがあります。

ここに私のプログラムがどのように見えるかの簡易版です。初期化が行われ、監視対象のディレクトリに新しいファイルを置くと、プログラムはfileCreatedサブに届きます。 e.FullPathが正しく設定されていることがわかります。しかし、それはエラーコードなしで直後に突然終了します(私は、とにかく見ることができません)。 fileCreatedのすべてをコメントアウトすると、プログラムは期待どおり実行され続けます。

なぜ私が死んでいるのかに関するアイデアはありますか?どんな助けでも大歓迎です。私はVS/VB.NETにはかなり新しいので、たぶん私は愚かな間違いをしているだけかもしれません。ありがとう!

答えて

3

クロススレッド操作の例外である可能性があります。

これを試してみてください:

Private Sub fileCreated(sender As Object, e As FileSystemEventArgs) 
    me.Invoke(New MethodInvoker(Function() txtLatestAddedFilePath.Text = e.FullPath)) 
End Sub 

かを(より良いあなたの文脈で)、fileWatcherの初期化中:

fileWatcher = New FileSystemWatcher() 
fileWatcher.SynchronizingObject = me 
[...] 

説明:

http://www.blackwasp.co.uk/FileSystemWatcher.aspxは4クロスを防止見ますスレッドの操作

抜粋:FileSystemWatcher オブジェクトは通知イベントを発生させたときにデフォルトで

、 デリゲートの呼び出しは、システムのスレッドプールからのスレッド に作られています。これは は一般的にフォームを制御するために使用されている と同じスレッドではありません。 は、デモンストレーション・アプリケーションとして リストボックスの内容は、クロススレッド操作 とIllegalOperationExceptionで 結果が あるであろう修正ファイルの変更が に割り当てられたスレッドを使用して、 形態の視覚要素内 をログに記録することを必要としますスローされる。

+0

Aha、それはクロススレッドの問題でした。あなたのソリューションは完璧に働いた、ありがとう! –

+0

それは完璧なマキシムです、ありがとうございます! – ucef

関連する問題