Thanks Erel,
I don't like threads and timers, and if I could I would process everything in a loop in the main thread (even UI events if it were posible!). I miss DOS
Anyway, I created the thread to process and play a wav sound file; as suggested in another post, it's better to soundstream in a secondary thread.
I want to raise some UI messages based on things that happen in that secondary thread, and that's why I wanted to change lblStory.Text from that thread. Now that you mention that I can't do that, I added a timer to pop that message. The secondary thread changes a global flag instead of lblStory.Text, and then the timer reads that flag and pops the message. It works now.
Still curious as why the secondary thread allowed me to change lblStory.Text a few times.
Rod