文件系统观察器更新窗体上的文本框



嘿,我正在使用文件系统观察器来检查.ini文件是否已更改。如果有,那么我希望我能够更新表单上的文本框。问题是它是一个共享函数,以便文件系统观察器工作,所以表单上的任何内容似乎都无法在该共享函数中访问?

我的代码:

Private Sub frmCamera_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim watcher As New FileSystemWatcher()
watcher.Path = Application.StartupPath
watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
watcher.Filter = "*.ini"
watcher.SynchronizingObject = Me
AddHandler watcher.Changed, AddressOf OnChanged
watcher.EnableRaisingEvents = True
End Sub
Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
Dim sb1 As New StringBuilder(500)
Dim theButtonsName As String = ""
GetPrivateProfileString("camera", "val1", "", sb1, sb1.Capacity, Application.StartupPath & "savedData.ini")
main.GetPrivateProfileString("camera", "val1", "", sb1, sb1.Capacity, Application.StartupPath & "savedData.ini")
Dim frm As frmCamera = DirectCast(DirectCast(source, FileSystemWatcher).SynchronizingObject, frmCamera)
frm.TextBox1.Text = "debug: " & sb1.ToString
End Sub

我用主表单调用上面的表单,如下所示:

Public Sub doStuff(ByVal what2Do As String)
If Trim(lanSent(0)) = "camera" And Trim(lanSent(1)) = "show" Then
theCam = New Threading.Thread(AddressOf ShowCam)
theCam.SetApartmentState(Threading.ApartmentState.STA)
theCam.Start()
Else
.....
End If
End Sub
Private Shared Sub ShowCam()
Dim ShowCam As New frmCamera
ShowCam.ShowDialog()
End Sub

我试图完成的是一旦它看到文本框中有输入(TextBox1_TextChanged),就运行一些其他的东西。

任何帮助都会很好地解决我的这个问题!谢谢!

不确定这是否适合您,因为我不知道您为什么使用共享事件处理程序,但是您可以尝试使用FileSystemWatcher.SynchronizingObject属性,如果您将其设置为表单,您可以在共享方法中检索它。

Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
Dim sb1 As New StringBuilder(500)
Dim theButtonsName As String = ""
GetPrivateProfileString("camera", "val1", "", sb1, sb1.Capacity, Application.StartupPath & "savedData.ini")
Dim frm As Form1 = DirectCast(DirectCast(source, FileSystemWatcher).SynchronizingObject, Form1)
frm.TextBox1.Text = sb1.ToString
End Sub

文件系统观察程序的初始化

Dim watcher As New FileSystemWatcher
watcher.Path = Application.StartupPath
watcher.SynchronizingObject = Me  'Assigning your Forms Instance to the SychronizingObject
watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
watcher.Filter = "*.ini"
AddHandler watcher.Changed, AddressOf OnChanged
watcher.EnableRaisingEvents = True

最新更新