Solved

Working with Objects

Posted on 2010-09-12
9
265 Views
Last Modified: 2012-05-10
I've been learning about watching for file creation; using FileSystemWatcher, and during part of the OnCreated process I'm trying to update a multi-line text box with what was read from the created text file.  The issue is that the text box doesn't update.

I've attached the code that I'm using.  How do I setup the objects so that I can pass the text read from the created file into the text box?  This is all on a single form.
Imports System.IO

Imports System.Security.Permissions

Imports System.Text.RegularExpressions



Public Class Form1

    Private Shared re As New Regex("[\x00-\x1F\x7F-\xFF]+", RegexOptions.Compiled)



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        TextBox1.Text = "does this work"

        Run()

    End Sub



    <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _

    Private Shared Sub Run()



        Dim watcher As New FileSystemWatcher()

        watcher.Path = "C:\Programming"

        watcher.NotifyFilter = NotifyFilters.FileName And Not NotifyFilters.Attributes

        watcher.Filter = "*.txt"

        watcher.IncludeSubdirectories = False



        AddHandler watcher.Created, AddressOf OnCreated



        watcher.EnableRaisingEvents = True





    End Sub



    Public Shared Sub OnCreated(ByVal source As Object, ByVal e As FileSystemEventArgs)

        Dim ex As Exception

        Dim strContents As String

        Dim objReader As StreamReader



        Try

            System.Threading.Thread.Sleep(1000)

            File.Move(e.FullPath, "C:\Programming\Archive\" & Replace(TimeOfDay, ":", "") & ".txt")



            Try

                objReader = New StreamReader("C:\Programming\Archive\" & Replace(TimeOfDay, ":", "") & ".txt")

                strContents = objReader.ReadToEnd()

                objReader.Close()

                strContents = re.Replace(strContents, "")

                MsgBox((strContents))

                '######################################################

                '########UNABLE TO SET TEXT BOX VALUE##################

                '######################################################

                Form1.TextBox1.Text = "yes this works"

            Catch Ex2 As Exception

                MsgBox(Ex2.Message)

            End Try

        Catch ex

            Dim typeValue As String

            typeValue = e.ChangeType.ToString

            MsgBox("ChangeType: " & typeValue)

        End Try

    End Sub



End Class

Open in new window

0
Comment
Question by:vbNewbie2009
9 Comments
 
LVL 17

Expert Comment

by:Zhaolai
ID: 33659313
It is:

Me.TextBox1.Text = "yes this works"

or just

TextBox1.Text = "yes this works"

0
 
LVL 1

Author Comment

by:vbNewbie2009
ID: 33659329
When I try using TextBox1.Text = "yes this works" ...i get a compile error referencing the following:

Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class
0
 
LVL 17

Expert Comment

by:Zhaolai
ID: 33659366
What would happen if you remove Shared from both sub Run and sub OnCreated?

0
 
LVL 1

Author Comment

by:vbNewbie2009
ID: 33659376
I receive an exception:
"Cross-thread operation not valid:  Control 'TextBox1' accessed from a thread other than the thread it was created on.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 9

Accepted Solution

by:
Hawkvalley1 earned 200 total points
ID: 33659466
This is because your watcher is on a diff thread and you need a delegate to talk to the textbox.

Private Delegate Sub UpdateTextDelegate(ByVal txt As String)

Private Sub UpdateText(ByVal txt As String)
    textbox1.Text = txt
End Sub

Public Sub OnCreated(ByVal source As Object, ByVal e As FileSystemEventArgs)
    textbox1.Invoke(New UpdateTextDelegate(AddressOf UpdateText), e.Name)
End Sub
0
 
LVL 17

Assisted Solution

by:Zhaolai
Zhaolai earned 200 total points
ID: 33659490
After you created FileSystemWatcher object, add the following line,

 watcher.SynchronizingObject = Me

0
 
LVL 1

Author Comment

by:vbNewbie2009
ID: 33659595
Thanks for the suggestions; i'll be trying these out tomorrow.
0
 
LVL 69

Assisted Solution

by:Éric Moreau
Éric Moreau earned 100 total points
ID: 33660688
0
 
LVL 1

Author Closing Comment

by:vbNewbie2009
ID: 33668676
Comments from Zhaolai and Hawkvalley1 each worked to populate the text object.  

Documentation link by emoreau is an excellent resource!

Thanks to all!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Well, all of us have seen the multiple EXCEL.EXE's in task manager that won't die even if you call the .close, .dispose methods. Try this method to kill any excels in memory. You can copy the kill function to create a check function and replace the …
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

862 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now