Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to: Search files from a certain directory with Progressbar + Backgroundworker
#1
Hello Everyone, Admin. I'm new to this Forum and i want to ask how to search files from a certain directory with progressbar & background worker? 

Code: (from the Admin-(Brandonio)) :
----------------------------------------------------------------------------------------------------------

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

        BackgroundWorker1.RunWorkerAsync()

    End Sub



    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

        Dim directory = "Path"
        Dim files() As System.IO.FileInfo
        Dim dirinfo As New System.IO.DirectoryInfo(directory)
        files = dirinfo.GetFiles("*", IO.SearchOption.AllDirectories)
        For Each file In files
            ListBox1.Items.Add(file)
        Next

    End Sub

----------------------------------------------------------------------------------------------------------
But whenever i click the button, i get an error saying : Cross-thread operation not valid: Control 'ListBox1' accessed from a thread other than the thread it was created on.
----------------------------------------------------------------------------------------------------------
I'm new in VB.NET and i'm making an application that cleans up the Temporary folder.
Thank you. and uh, i like this forum.
Reply
#2
Hello ryanshane91 and welcome to BP Forums!

In most programming environments, VB.NET included, there is a main user-interface thread which is the only thread that is allowed to access user interface components. In VB.NET, a BackgroundWorker works on a thread separate than the user-interface thread and thus is not allowed to access user interface components.

There are thus two ways to solve your problem:
1. Tell VB.NET to ignore this restriction and allow non user-interface threads to access the user-interface (
Code:
System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;
)

2. The `BackgroundWorker` has an event to report progress. You can then handle this report on the UI thread. You can do this by:
2a. Setting BackgroundWorker1.WorkerReportsProgress = True
2b. In `BackgroundWorker1_DoWork`, do something like `BackgroundWorker1.ReportProgress(file)`
2c. A new sub which handles the reported progress to add the file to the listbox.

I hope this helps!
My Blog | My Setup | My Videos | Have a wonderful day.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Read all lines from multiple text files. strawman83 2 17,297 06-04-2015, 08:54 AM
Last Post: strawman83

Forum Jump:


Users browsing this thread: 1 Guest(s)