When you retrieve an item from a ListBox it is returned as an Object reference. That's because a ListBox can contain any type of object. As such, you can only access members of the Object class unless you cast the item as its actual type, e.g.
vb.net Code:
Dim item As SomeType = DirectCast(myListBox.Items(index), SomeType)
That said, if what you want is the text displayed in the ListBox then you can get that the same way no matter what the type of the items:
vb.net Code:
Dim itemText As String = myListBox.GetItemText(myListBox.Items(index))
If you had read the documentation for the ListBox class then you'd have seen that for yourself. Why does it never occur to anyone to read the documentation? That's what it's for.
As far as the multi-threading angle goes, follow the CodeBank link in my signature and check out my post on accessing controls from worker threads.