【问题标题】:delay text to speech until after label.text updates in vb.net延迟文本到语音,直到在 vb.net 中的 label.text 更新之后
【发布时间】:2011-10-07 04:37:30
【问题描述】:

我想知道在label.text更新后是否有一种简单的方法可以使文本到语音发生

如果我有以下情况:

label.Text = "words words"
voice.Speak(label.Text)

我希望表单上的标签在它说话之前显示“单词单词”。我是vb的初学者,唯一能想到的就是使用计时器。只是想知道是否有更简单/更复杂的解决方案。感谢您的帮助

【问题讨论】:

    标签: .net vb.net winforms controls label


    【解决方案1】:

    使用 SpeakAsync() 方法,这样语音引擎就不会阻塞您的 UI 线程。这解决了许多问题,包括标签的延迟绘制。

    【讨论】:

      【解决方案2】:

      诀窍是在调用Speak 方法之前强制标签用新文本重新绘制自身。仅仅因为您为控件分配了一个新的文本值并不能确保它立即用该新文本重新绘制。通常,系统会等到它空闲后再进行重绘,但在告诉它执行Speak 方法之前,您不会让它空闲。

      在 .NET 中解决此问题的最简单方法是调用 Refresh method。所有控件都有它,它完全符合您的要求。它强制控件使其客户区(即您可以看到的部分,包括文本)无效并立即重绘它。

      将您的代码更改为如下所示:

      label.Text = "words words"
      label.Refresh()        
      voice.Speak(label.Text)
      

      【讨论】:

      • 总是喜欢 Update() 而不是 Refresh()。
      • 非常感谢您的解释!我不熟悉控件的更新过程。
      • @knob:当然,没问题。不过,汉斯更喜欢Update() 方法是对的。无论出于何种原因,我都认为控件没有失效。但当然,它有,因为你改变了它的文字!
      猜你喜欢
      • 2019-05-13
      • 2020-04-29
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多