thanks for the help.
As for those who are multi-threading, create a class that does the work. Include any public variables that you want to set from the main app.
When you spawn each class as a thread add both the thread and the class object to an array. The object reference lets you access the objects parameters later, as needed. The Thread Reference lets you control the thread, as needed from the main routine.
Dim arrFTP_GetThreads As New ArrayList
Dim arrFTPGetObjects As New ArrayList
When you create the object you can add a handler (i use the same one for each thread).
Dim objFTP_Get As New clsFTP_Get
AddHandler objFTP_Get.ThreadStatusUpdate, AddressOf sFTP_GetThreadEventHandler
{ set parameters of object here }
Dim myNewFTP_Thread As New Thread(AddressOf YourClass.YourRoutine)
arrFTP_GetThreads.Add(myNewFTP_GetThread) :
arrFTPGetObjects.Add(objFTP_Get)
myNewFTP_GetThread.Start()