c# - sistemas - Cancelar síntesis de voz en Windows Phone 8
sistema de recomendacion tesis (1)
Como desea cancelar la operación asincrónica, puede usar la IAsyncAction
devuelta por SpeakTextAsync
lugar de usar SpeakTextAsync
.
private SpeechSynthesizer synth = new SpeechSynthesizer();
private IAsyncAction task;
private void ButtonCancelSpeech(object sender, EventArgs eventArgs)
{
try
{
//cancel the async task itself
task.Cancel();
}
catch (TaskCanceledException)
{
}
}
private void BtnSpeech_Click(object sender, EventArgs e)
{
IEnumerable<VoiceInformation> voices = from voice in InstalledVoices.All
where voice.Language.Substring(0, 2).Equals(LanguageApp.GetLangage2Characters())
select voice;
if (voices.ElementAt(0) != null)
{
// Set the voice as identified by the query.
synth.SetVoice(voices.ElementAt(0));
task = synth.SpeakTextAsync(_place.Description);
}
}
Agrego una síntesis de voz a mi aplicación. Funciona, pero el problema es que no puedo cancelar el discurso ... Por ejemplo, cuando navego a otra página, el discurso continúa ... Por lo tanto, invoco el método CancelAll () para cancelar el discurso actual, pero se produce una excepción y no sé por qué ¿Sabes cuál es el problema?
La excepción
A first chance exception of type ''System.Threading.Tasks.TaskCanceledException'' occurred in mscorlib.ni.dll
An exception of type ''System.Threading.Tasks.TaskCanceledException'' occurred in mscorlib.ni.dll and wasn''t handled before a managed/native boundary
An exception of type ''System.Threading.Tasks.TaskCanceledException'' occurred in mscorlib.ni.dll and wasn''t handled before a managed/native boundary
The program ''[2576] TaskHost.exe'' has exited with code -1 (0xffffffff).
Mi código:
private SpeechSynthesizer synth = new SpeechSynthesizer();
protected override void OnBackKeyPress(CancelEventArgs e)
{
//I tried to cancel also here but it''s the same exception...
}
//method called when I press a button Cancel
private void ButtonCancelSpeech(object sender, EventArgs eventArgs)
{
try
{
synth.CancelAll();
}
catch (TaskCanceledException)
{
//I arrive in this exception
}
}
private async void BtnSpeech_Click(object sender, EventArgs e)
{
IEnumerable<VoiceInformation> voices = from voice in InstalledVoices.All
where voice.Language.Substring(0, 2).Equals(LanguageApp.GetLangage2Characters())
select voice;
if (voices.ElementAt(0) != null)
{
// Set the voice as identified by the query.
synth.SetVoice(voices.ElementAt(0));
await synth.SpeakTextAsync(_place.Description);
}
}
Gracias