好吧我的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和图标。
答案 0 :(得分:1)
您的代码未显示您如何设置Watcher.NofityFilter。如果您希望在文件写完后引发事件并准备好使用 - 那么您必须按如下方式设置:
Watcher.NotifyFilter = NotifyFilters.Attributes;
然后删除您列出的Watcher.Created
事件;你想只拥有Changed
。否则,您将收到两个事件:一个用于创建文件,其中包含零字节,另一个用于文件写入完成时。我相信你只关心文件写完的时候。