我的项目中有一个处理FileSystem事件(FileSystemWatcher)的线程,并在创建文件时引发事件。
我面临的问题是,只要我执行此线程,它就会结束。出于某种原因,在执行代码以启动FileSystemWatcher之后,线程立即存在(认为它已经执行了所有代码),因此不会引发任何事件。
我使用以下代码提出了一个解决方案:
Do While True
Application.DoEvents()
Threading.Thread.Sleep(1)
Loop
这样可以防止线程退出,因此可以继续执行事件,FileSystemWatcher可以在创建文件时正确引发事件。
但是,我不相信这是一种可持续的方法来确保事件的提升,因为它使用了更多的资源,似乎走捷径。
有没有办法正确确保线程保持运行,因此FileSystemWatcher可以正确引发事件?
感谢您的协助。
答案 0 :(得分:0)
为什么要在线程上初始化FileSystemWatcher
?
我认为你不需要一个单独的线程。
但您可以使用Async / Await异步处理触发的事件。
Private Shared Async Sub OnChanged(source As Object, e As FileSystemEventArgs)
Await Task.Delay(1000)
End Sub
答案 1 :(得分:0)
将FileSystemWatcher1添加到表单中。在FileSystemWatcher1的属性中将EnableRaisingEvents设置为True,修改过滤器以考虑您要查找的文件(即* .txt或。或您正在观看的任何内容),设置NotifyFilter为“FileName,LastWrite”,并指定您要观看的路径。
在您的代码中添加...
Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim Watcher As FileSystemWatcher = FileSystemWatcher1
AddHandler Watcher.Created, AddressOf OnCreated
Watcher.EnableRaisingEvents = True 'already configured in the control, but why not
End Sub
Private Shared Sub OnCreated(source As Object, e As FileSystemEventArgs)
'Actions to perform when file is created
End Sub