防止线程退出VB.NET

时间:2016-04-27 23:01:25

标签: vb.net multithreading

我的项目中有一个处理FileSystem事件(FileSystemWatcher)的线程,并在创建文件时引发事件。

我面临的问题是,只要我执行此线程,它就会结束。出于某种原因,在执行代码以启动FileSystemWatcher之后,线程立即存在(认为它已经执行了所有代码),因此不会引发任何事件。

我使用以下代码提出了一个解决方案:

     Do While True
        Application.DoEvents()
        Threading.Thread.Sleep(1)
    Loop

这样可以防止线程退出,因此可以继续执行事件,FileSystemWatcher可以在创建文件时正确引发事件。

但是,我不相信这是一种可持续的方法来确保事件的提升,因为它使用了更多的资源,似乎走捷径。

有没有办法正确确保线程保持运行,因此FileSystemWatcher可以正确引发事件?

感谢您的协助。

2 个答案:

答案 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