How to put this function inside a separate thread
backgroundworker, multithreading, vb.net, visual-studio
Solution
There is a Windows Forms component called BackgroundWorker that is designed specifically to offload long-running tasks from the UI thread to a background thread, leaving your form nice and responsive.
The BackgroundWorker component has an event called DoWork that is used to execute code on a separate thread. Drag the BackgroundWorker component onto your form and then do something like this:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles start_button.Click
NameOfDirectory = userSelectedFolderPath
backgroundWorker1.RunWorkerAsync(NameOfDirectory)
End Sub
Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim directoryName as string = e.Argument
MediaInfo(directoryName)
End Sub
A couple of links that might be useful are the MSDN BackgroundWorker page and an example on Code Project.
HTH
Problem
I need a little (or big) help with my form: I need to use everything inside the "Organize function" region in a separate thread. I press a button in my form's "Start button" region to call the first sub of the "Organize function" subs; the first sub calls the second sub and the second sub calls the third sub. I tried adding the third sub into a separate thread by myself and then using the second sub to pass the argument to the thread but all I've done is wrong. Can someone please help me do this? PS: I've deleted the non-important parts in this form to let you check better. Thank you for reading. ``` Public Class Form1 #Region "Declarations" ' MediaInfo Dim MI As MediaInfo ' Thread Dim paused As Boolean = False ' Others Dim NameOfDirectory As String = Nothing Dim aFile As FileInfo #End Region 'thread Dim t As New Thread(AddressOf ThreadProc) Public Sub ThreadProc() ' Aqui debería ir todo el sub de "organize function", bueno... son 3 subs! If paused = True Then MsgBox("THREAD PAUSADO") End Sub #Region "Properties" ... #End Region #Region "Load / Close" ... #End Region #Region "Get Total files Function" ... #End Region #Region "Option checkboxes" ... #End Region #Region "Folder buttons" ... #End Region #Region "Append text function" ... #End Region #Region "Action buttons" ' pause button Private Sub pause_button_Click(sender As Object, e As EventArgs) Handles pause_button.Click paused = True End Sub ' start button Private Sub Button2_Click(sender As Object, e As EventArgs) Handles start_button.Click t.Start() ' Organization process NameOfDirectory = userSelectedFolderPath MediaInfo(NameOfDirectory) End Sub #End region #Region "Organize function" Public Sub MediaInfo(Directory) Dim MyDirectory As DirectoryInfo MyDirectory = New DirectoryInfo(NameOfDirectory) MediaInfoWorkWithDirectory(MyDirectory) End Sub Public Sub MediaInfoWorkWithDirectory(ByVal aDir As DirectoryInfo) Dim nextDir As DirectoryInfo MediaInfoWorkWithFilesInDir(aDir) For Each nextDir In aDir.GetDirectories Using writer As StreamWriter = New StreamWriter(aDir.FullName & "\" & nextDir.Name & "\" & nextDir.Name & ".m3u", False, System.Text.Encoding.UTF8) 'overwrite existing playlist End Using MediaInfoWorkWithDirectory(nextDir) Next End Sub Public Sub MediaInfoWorkWithFilesInDir(ByVal aDir As DirectoryInfo) Dim aFile As FileInfo For Each aFile In aDir.GetFiles() ' hacer cosas con aFile ... Next End Sub #End Region End Class ```