задержка текста в речь до обновления label.text в vb.net - PullRequest
0 голосов
/ 17 июля 2011

Мне интересно, есть ли простой способ заставить текст в речь произойти после обновления label.text

Если у меня есть следующее:

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

Я хотел быметка в форме для отображения «слова слова», прежде чем он говорит.Я начинающий с vb, и единственное, что я мог придумать, это использовать таймер.Просто интересно, есть ли более простое / более сложное решение.Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Используйте метод SpeakAsync (), чтобы речевой механизм не блокировал ваш поток пользовательского интерфейса. Это решает многие проблемы, в том числе задерживает рисование этикетки.

1 голос
/ 17 июля 2011

Хитрость заключается в том, что метка заставляет себя перекрашивать новый текст перед вызовом метода Speak.Тот факт, что вы присваиваете новое текстовое значение элементу управления, не гарантирует, что он немедленно будет перекрашен с этим новым текстом.Как правило, система ждет, пока она не будет выполнять перерисовки, но вы не даете ей простаивать, прежде чем вы скажете ей выполнить метод Speak.

Самый простой способ исправить это в .NET - этовызовите метод Refresh .Все элементы управления имеют его, и он делает именно то, что вы хотите здесь.Он заставляет элемент управления сделать недействительной свою клиентскую область (то есть ту часть, которую вы можете видеть, включая текст) и немедленно перерисовать ее.

Измените код так, чтобы он выглядел следующим образом:

label.Text = "words words"
label.Refresh()        
voice.Speak(label.Text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...