FileSystemWatcher show form on file create

Hey Experts,

I have been smashing my head into a wall the last week trying to figure this out. I am sure it will turn out being something simple.

First off, I am using VB.NET from VS 2005.

I am monitoring a directory for a specific file type, lets say they are txt files.
On creation I want to create an instance of form2.
set vars on it, then show it.

so I have the following which fires  when the watcher detects a change
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub logchange(ByVal source As Object, ByVal e As _
                      System.IO.FileSystemEventArgs)
        If e.ChangeType = IO.WatcherChangeTypes.Changed Then

            '  MsgBox("File " & e.FullPath & _
            '                        " has been modified" & vbCrLf)
        End If
        If e.ChangeType = IO.WatcherChangeTypes.Created Then

            ' MsgBox("File " & e.FullPath & _
            '                        " has been created" & vbCrLf)
           
            Dim myFrom as new Form2
            myForm.label1.text="SOME VALUE"
            myForm.Show()


        End If
        If e.ChangeType = IO.WatcherChangeTypes.Deleted Then

            'MsgBox("File " & e.FullPath & _
            '                         " has been deleted" & vbCrLf)
        End If
    End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

This works great when I just use message boxes but when attempt to display the form, it appears then kinda locks in place creating a white backround.

I understand that the watcher is running on another thread, and understand the concept of invoke and delegates but I simply can not figure this out.
kevin1265Asked:
Who is Participating?
 
ericwong27Commented:
Try this

I using CLR2.0 new feature (No multi form pop up)

Form2.Text = "Create"
Form2.Show()

Instead of

Dim myform as new form2
myform.Text = "Create"
myform.Show()



Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        With Me.FileSystemWatcher1
            .EnableRaisingEvents = True
            .Path = "C:\Temp"
            .Filter = "*.*"
        End With

    End Sub

    Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) _
    Handles FileSystemWatcher1.Changed, FileSystemWatcher1.Created, FileSystemWatcher1.Deleted

        Select Case e.ChangeType
            Case IO.WatcherChangeTypes.Created
                Form2.Text = "Create"
                Form2.Show()
            Case IO.WatcherChangeTypes.Deleted
                Form2.Text = "Delete"
                Form2.Show()
            Case IO.WatcherChangeTypes.Renamed
                Form2.Text = "Rename"
                Form2.Show()
        End Select

    End Sub


End Class
0
 
bchoorCommented:
I'm not sure if you copied-pasted directly from your code. You dimension 'myFrom' but are setting on 'myForm'
         
Dim myFrom as new Form2
            ^^

myForm.Show()
      ^^



You may try also - myForm.ShowDialog() - so then it'll be modal - like a message box.

HTH
~BC

0
 
kevin1265Author Commented:
Eric you the man, you have no idea how much this helped.

Bchoor thanks this works as well however it freezes my GUI.

Thanks for the quick response.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.