2010-02-17 6 views
1

est ici un code du C# Windows FormC# WinForm ne répond pas - System.Speech - Aide

SpeechSynthesizer audio = new SpeechSynthesizer(); 
audio.Speak(textBox1.Text); 
  • Cela va lire tout ce qui est dans la zone de texte

problème en essayant de mettre en œuvre la fonction de pause et d'arrêt.Tout bouton ou menuitem ne clique pas lorsque le code lit quelque chose

public void button1_Click(object sender, EventArgs e) 
    { 
     //Nothing gets executed here when the code is reading 
    } 

Je viens de lire il y a SpeakProgressEventArgs http://msdn.microsoft.com/en-us/library/system.speech.synthesis.speakprogresseventargs%28VS.85%29.aspx

i ... essayées synthé asyncancel ... mais l'événement de clic du bouton ne marche pas été exécutée

+0

Le SpeechSynthesizer s'exécute-t-il dans le thread de l'interface utilisateur? Vous aurez probablement une mauvaise réactivité de l'interface utilisateur si elle s'exécute dans le même thread que la boucle d'événement de l'interface utilisateur. –

Répondre

4

Utilisez la méthode SpeakAsync() au lieu. Cela empêche l'IU de bloquer sur la méthode Speak(), il ne peut pas répondre aux clics de bouton pendant qu'il est bloqué. Vous pouvez utiliser SpeakAsyncCancelAll() pour l'empêcher de chanceler.

+0

résolu en utilisant la solution suggérée .Merci – aBs0lut3z33r0

3

vous devez gérer ce bloc audio.Speak(textBox1.Text); en utilisant Threads

 Thread t = new Thread(() => 
     { 
      SpeechSynthesizer audio = new SpeechSynthesizer(); 
      audio.Speak(textBox1.Text); 
     }); 
     t.Start(); 

Maintenant, comment arrêter un thread en cours d'exécution? très bien expliqué dans cette affiche

+0

Va essayer de mettre en œuvre le problème multithread – aBs0lut3z33r0