将文本延迟到语音,直到vb.net中的label.text更新

时间:2011-07-17 16:03:28

标签: .net vb.net winforms controls label

我想知道在label.text

更新后是否有一种简单的方法可以使文字转语音出现

如果我有以下内容:

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

将您的代码更改为:

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