First off, i haven't looked at your code in detail, but the first thing i can see is here
Private Sub LoadProduct(res As List)
thread1.RunOnGuiThread("AddPanel",Array As Object(res.Get(i),i))
you're passing a List object and then here:
Private Sub AddPanel(Temp As Map,i As Int)
you're expecting a Map object, i don't think that would work!
I'll look at the code later on in detail when i have more time.
Cheers,
Walter