【问题标题】:Cancel speech synthesis in windows phone 8windows phone 8取消语音合成
【发布时间】:2013-03-18 18:49:06
【问题描述】:

我在我的应用中添加了语音合成。它可以工作,但问题是我无法取消语音...例如,当我导航到另一个页面时,语音继续...所以,我调用 CancelAll() 方法来取消当前语音但发生异常我不知道为什么。你知道是什么问题吗?

例外

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).

我的代码:

    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);
        }
    }

谢谢

【问题讨论】:

    标签: c# windows-phone-8 text-to-speech


    【解决方案1】:

    由于您想取消异步操作,您可以使用从SpeakTextAsync 返回的IAsyncAction,而不是使用await

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多