FileSystemWatcher未正确触发

时间:2012-09-12 13:12:03

标签: visual-studio-2010 filesystemwatcher

好吧我的filesystemwatcher在我的列表框中的第一项存在之前没有触发。但是,列表框中列出的文件不会按该顺序创建。

进一步解释......

我正在获取在文本框中输入的值,并将该值添加到列表框并更改图片框中该值旁边的图标。该图标将提醒用户尚未创建PDF。

    ListBox1.Items.Add(TextBoxTicketID.Text)

    If CStr(ListBox1.Items(0)) = TextBoxTicketID.Text Then
        PictureBoxStatus1.Image = My.Resources.Orange_Information
    ElseIf (ListBox1.Items(1)) = TextBoxTicketID.Text Then
        PictureBoxStatus2.Image = My.Resources.Orange_Information
    ElseIf (ListBox1.Items(2)) = TextBoxTicketID.Text Then
        PictureBoxStatus3.Image = My.Resources.Orange_Information
    End If

    TextBoxTicketID.Text = ""

    Call CheckPDFs()

以下是我目前正在检查是否已创建PDF的方法。

最后,在msgbox所在的私人子网站中,我想将ID旁边的图标更新为绿色复选标记,表示已创建PDF。

Public Sub CheckPDFs()
    Dim x As Integer
    Dim Watcher As New FileSystemWatcher()
    Watcher.Path = "C:\Temp\"
    Watcher.NotifyFilter = (NotifyFilters.Attributes)
    Watcher.Filter = ListBox1.Items(x) + ".pdf"

    AddHandler Watcher.Changed, AddressOf OnChanged

    Watcher.EnableRaisingEvents = True
End Sub

Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
    Dim x As Integer
    ' Specify what is done when a file is created.
    MsgBox("File has been created!")
End Sub

当我运行测试时,我创建了两个在列表框中输入的unigue ID。

问题1:我通过输入的第一个ID手动创建PDF,没有任何触发器。我必须将PDF从目录中移出并在它触发msgbox之前返回。

问题2:如果我输入了两个ID,我手动创建第二个ID,没有任何触发器。我将文件移出目录并重新登录,仍未触发。

为什么在触发之后输入的任何ID之前,第一个ID需要存在?

修改

此处有两个屏幕截图,在用户输入和之后,显示输入的ID和图标。

Before_IDs_Entered

After_IDs_Entered

1 个答案:

答案 0 :(得分:1)

您的代码未显示您如何设置Watcher.NofityFilter。如果您希望在文件写完后引发事件并准备好使用 - 那么您必须按如下方式设置:

Watcher.NotifyFilter = NotifyFilters.Attributes;

然后删除您列出的Watcher.Created事件;你想只拥有Changed。否则,您将收到两个事件:一个用于创建文件,其中包含零字节,另一个用于文件写入完成时。我相信你只关心文件写完的时候。