0

我有一个取消按钮来取消语音合成器的 speakAsync 方法。它通过 a 调用,PromptBuilder输出设置为波形文件,如

reader.SetOutputToWaveFile(CurAudioFile, fmt);
reader.SpeakAsync(PB); 

并取消它如下:

private buttonCancel_Click(...)
{
    if (Utility.Warn("Are you sure you want to cancel reading the document aloud?") == System.Windows.Forms.DialogResult.Yes)
    {
         reader.SpeakAsyncCancelAll();
    }
}

但问题是,当我单击取消按钮时,代码永远不会执行!实际上它对按钮单击没有响应并且没有执行!

我尝试Application.DoEvents()在 speak_progress 中使用,但也无济于事!

4

2 回答 2

0

我发现Speak_progress在说出每个单词后调用的事件中,我调用Focus控件的方法。然后它经常从取消按钮转移焦点并且无法执行点击!

希望这个答案对类似的问题有用!

于 2016-01-03T16:37:04.737 回答
0

由于在异步播放时它是不同的线程,因此您可能会丢失对阅读器对象的引用。

我建议您将其声明readerstatic财产,特别是如果您在其他事件中取消它。

于 2016-01-03T14:17:41.107 回答