Then i should say you use SpVoice,but you don't know about it's features.
SpVoice.Speak() method can be called synchronously or asynchronously. When called synchronously, the method does not return until the text has been spoken; when called asynchronously, it returns immediately, and the voice speaks as a background process.
So use asynchronous method instead of synchronous,your problem should be solved.Use
SpeechVoiceSpeakFlags.SVSFlagsAsync as like ase..
SpVoice voice = new SpVoice ();
voice.Speak ("An example of SpVoice.",SpeechVoiceSpeakFlags.SVSFlagsAsync);
Below code is a part of one of my project...
I use
SpeechSynthesizer class of
System.Speech dll.
Create an instance like..
SpeechSynthesizer synthesis=new SpeechSynthesizer();
Then for speech conversion i use..
synthesis.SpeakAsync(richTextBox1.Text);
To stop speech i use..
synthesis.Dispose();