tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルファイル監視でフリーズ
記事No9149
投稿日: 2009/07/08(Wed) 16:17
投稿者まつ
いつもお世話になっております。VisualStudio2008で開発しております。

今回、ファイル監視プログラムを作成したところ
大凡、期待した通りの動きになりました。

しかし、1度、監視していたファイルの変更などを受け取ると
非同期のはずが、画面がフリーズしてしまい、その後、変更等を受け取る事ができなくなります。
1回目だけが正しい動きで、そのままフリーズし、以降の変更は受け付けません。


非同期で作成し、Form上で以下を記述しております。

監視するファイル等の設定後、
AddHandler watcher.Changed, AddressOf DoWork
watcher.EnableRaisingEvents = True


    Shared Sub DoWork(ByVal source As Object, ByVal e As FileSystemEventArgs)
        Select Case e.ChangeType.ToString()

            Case "Changed"

        '変更されたファイルが使用可になるまで待つ
                Dim st As Stream = Nothing
                Dim maxCount As Integer = 100

                Dim i As Integer
                For i = 0 To maxCount - 1
                    Try
                        st = File.Open(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.None)
                        If Not st Is Nothing Then
                            Exit For
                        End If
                    Catch ex As Exception
                        System.Threading.Thread.Sleep(1000)
                    End Try
                Next
                If Not st Is Nothing Then
          '使用可になったのでコマンドを実行
                    st.Close()
                    Shell("cmd.exe /c """ & Form1.txtCmdChange.Text & """", AppWinStyle.Hide, True)
                    Form1.lblMessage.Text = Now() & " 監視ファイルが変更されました。"

                Else
                    ' タイムアウト
                End If


何故、フリーズしてしまい、次回からの変更を受け付けないのか
Googleで調べたのですが、どうしてもわからず
投稿させていただきました。


お忙しい中とは存じますが、ご教授の程、宜しくお願い致します。

[ツリー表示へ]
タイトルRe: ファイル監視でフリーズ
記事No9150
投稿日: 2009/07/08(Wed) 16:36
投稿者Hongliang
本当に非同期なら、今度は
> Shell("cmd.exe /c """ & Form1.txtCmdChange.Text & """", AppWinStyle.Hide, True)
> Form1.lblMessage.Text = Now() & " 監視ファイルが変更されまし
この辺がまずいと言う別の問題があることになりますけど。

「非同期で作成」とはどういう意味でしょうか?
FileSystemWatcher はツールボックスから D&D したものですか?
FileSystemWatcher の SynchronizingObject は設定していますか?

[ツリー表示へ]