Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 8 取消Windows Phone语音合成器_Windows Phone 8_Text To Speech - Fatal编程技术网

Windows phone 8 取消Windows Phone语音合成器

Windows phone 8 取消Windows Phone语音合成器,windows-phone-8,text-to-speech,Windows Phone 8,Text To Speech,我的应用程序正在多次调用SpeechSynthesizer.SpeakTextAsync,因此大部分文本将在说出之前添加到队列中。我想让用户能够取消演讲并丢弃队列中的所有内容 我尝试调用SpeechSynthesizer.CancelAll或SpeechSynthesizer.Dispose,当调用其中一个方法时,应用程序将崩溃 我已经看过了,但是由于我的应用程序在队列中添加了多个语音,Task.Cancel似乎不起作用。好吧,当你调用cancelall时,你正在取消异步执行的任务。根据约定,这

我的应用程序正在多次调用SpeechSynthesizer.SpeakTextAsync,因此大部分文本将在说出之前添加到队列中。我想让用户能够取消演讲并丢弃队列中的所有内容

我尝试调用
SpeechSynthesizer.CancelAll
SpeechSynthesizer.Dispose
,当调用其中一个方法时,应用程序将崩溃

我已经看过了,但是由于我的应用程序在队列中添加了多个语音,
Task.Cancel
似乎不起作用。

好吧,当你调用
cancelall
时,你正在取消异步执行的
任务。根据约定,这将导致抛出一个。这意味着,无论您在哪里调用SpeakTextAsync、SpeakSsmlAsync或SpeakSsmlFromUriAsync,您都必须使用try/catch语句围绕这些调用,以防止此异常未被捕获。

好的,当您调用
CancelAll
时,您正在取消异步执行的
任务。根据约定,这将导致抛出一个。这意味着,无论您在哪里调用SpeakTextAsync、SpeakSsmlAsync或SpeakSsmlFromUriAsync,都必须使用try/catch语句来包围这些调用,以防止此异常未被捕获。

专用静态SpeechSynthesizer synth;
private static SpeechSynthesizer synth;

public async static Task<SpeechSynthesizer> SpeechSynth(string dataToSpeak)
        {
            synth = new SpeechSynthesizer();
            IEnumerable<VoiceInformation> englishVoices = from voice in InstalledVoices.All
                                                          where voice.Language == "en-US"
                                                          && voice.Gender.Equals(VoiceGender.Female)
                                                          select voice;
            if (englishVoices.Count() > 0)
            {
                synth.SetVoice(englishVoices.ElementAt(0));
            }

            await synth.SpeakTextAsync(dataToSpeak); 

            return synth;
        }  


public static void CancelSpeech()
        {
            synth.CancelAll();
        }
公共异步静态任务SpeechSynth(字符串dataToSpeak) { synth=新的语音合成器(); IEnumerable englishVoices=来自安装语音中的语音。全部 其中voice.Language==“en-US” &&声音。性别。平等(声音性别。女性) 选择语音; if(englishVoices.Count()>0) { synth.SetVoice(englishVoices.ElementAt(0)); } 等待synth.SpeakTextAsync(dataToSpeak); 返回合成器; } 公共静态语音 { synth.CancelAll(); }
现在,在需要的地方调用
SpeechSynth(“一些要说话的数据”)
,无论何时,只要想取消它,就调用
CancelSpeech()

完成了!享受

专用静态语音合成器synth;
公共异步静态任务SpeechSynth(字符串dataToSpeak)
{
synth=新的语音合成器();
IEnumerable englishVoices=来自安装语音中的语音。全部
其中voice.Language==“en-US”
&&声音。性别。平等(声音性别。女性)
选择语音;
if(englishVoices.Count()>0)
{
synth.SetVoice(englishVoices.ElementAt(0));
}
等待synth.SpeakTextAsync(dataToSpeak);
返回合成器;
}  
公共静态语音
{
synth.CancelAll();
}
现在,在需要的地方调用
SpeechSynth(“一些要说话的数据”)
,无论何时,只要想取消它,就调用
CancelSpeech()


完成了!享受

@Will,成功了!下次要仔细阅读文件。你能写一个答案吗?这样我就可以把它作为答案了?谢谢完成。如果你在我的答案中编辑并添加一小段代码来演示,我就不会哭了。@Will,它成功了!下次要仔细阅读文件。你能写一个答案吗?这样我就可以把它作为答案了?谢谢完成。如果你在我的答案中编辑并添加一小段代码来演示,我不会哭。