I found an answer for the second question and I tried using the ProcessModelPreStep callback to no avail. I get the same type of errors.
http://zone.ni.com/reference/en-XX/help/370052K-01/tsfundamentals/infotopics/process_models_modify/
It seems multiple threads are accessing the same properties as described here.
http://forums.ni.com/t5/NI-TestStand/TestStand-Shared-Object-in-show-step-in-variable-tab/td-p/11984...
The pre-step callback I use doesn't just read properties but also remove and insert variables to the step's custom additional results. I use statements such as the following.
RunState.CallingStep.AdditionalResults.CustomResults.Item(Locals.LoopIndex).Name == "\"Temperature\""
RunState.CallingStep.AdditionalResults.CustomResults.Remove(Locals.LoopIndex)
I don't get why RunState.CallingStep in different threads refer to the same object (shared object). How can I make each thread deal with its own unique CallingStep?