Il problema è che la funzione GetObjectProperty dovrebbe essere implentata così perchè fosse thread safe:
Ma rimane comunque il problema che l'ultima cosa che ritorna quella funzione è l'ultimo return "" perchè cmq è una chiamata ricorsiva.
Ecco una possibile soluzione:
Uno dei modi è quello di passare da una variabile privata membro della classe, in questo modo il risultato, durante la chiamata ricorsiva, viene salvato nel membro della classe. La chiamata ricorsiva ritorna _PropertyValue e di quel valore non ce se ne fa niente, mentre l'ultimo return, cioè quello riferito alla prima chiamata, quando ancora l'InvokeRequired era a true, ritorna anch'esso _PropertyValue con il valore voluto. Oppure è possibile gestire il tutto anche con BeginInvoke e EndInvoke passando a quest'ultimo il risultato della funzione eseguita, ma comunque ritengo che la soluzione che ti ho proposto sia semplice e indolore (prestazionalmente parlando).
Spero di essere stato chiaro e utile 
Ciaooo 
- Michael -
http://blogs.dotnethell.it/Regulator/