【问题标题】:Cancel button to cancel SpeakAsync method doesn't respond取消按钮取消 SpeakAsync 方法没有响应
【发布时间】:2016-01-03 13:37:34
【问题描述】:

我有一个取消按钮来取消语音合成器的 speakAsync 方法。它通过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();
    }
}

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

我尝试在 speak_progress 中使用Application.DoEvents(),但也没有用!

【问题讨论】:

  • 我无法重现您的问题。您确定您使用的是SpeakAsync 而不是Speak
  • @YacoubMassad 是的,说 asynch,你是否将输出设置为波形文件?
  • 您能否展示更多您的代码?您在哪里以及如何存储阅读器?
  • @YacoubMassad 我发现了问题,在 speak_progress 我调用Focus 进行控制,它使焦点从按钮上移开并且不让它被点击!

标签: c# winforms asynchronous speechsynthesizer


【解决方案1】:

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

我建议您将 reader 声明为 static 属性,特别是如果您在其他事件中取消它。

【讨论】:

  • 谢谢,我发现了问题,在 speak_progress 中我调用Focus 进行控制,它使焦点从按钮上移开,不让它被点击!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多