You can not unload the UC even with its index inside the DoSpeak since you use asynchronous reading. You need to consider the event raised by the Speech object at the end of the stream and unload the UC in its event-handler. But, better to raise your own event here and handle it within the Form so that you can control the array index and the counter easily.
An update is attached. Now, you can click the button any number of times in a row to produce voices.