Нужно приостанавливать программу на некоторое время в некотором месте. Пытаюсь сделать так, чтобы между текстом пользователя и выводом ответа проходило некоторое время(вопрос-время-ответ), но при использовании Thread.Sleep() программа засыпает до вывода вопрос-ответ(время-вопрос-ответ). Подскажите, как сделать
static void sre_speech(object sender,SpeechRecognizedEventArgs e)
{
string answer="Извини, не поняла";
if (e.Result.Confidence > 0.82)
{t.Text += "Ivan:>"+e.Result.Text+Environment.NewLine;
switch (e.Result.Text)
{
case "Привет":
answer = "Привет, Иван";
break;
case "Как дела":
answer = "У меня неплохо :)";
break;
case "Сколько времени":
answer = dt.Hour+":"+dt.Minute+":"+dt.Second;
break;
}
}
Thread.Sleep(1500);
t.Text += "Caroline:>" + answer + Environment.NewLine;
}`
private void form1_Shown(object sender, EventArgs e)
{
t = chat;
CultureInfo ci = new CultureInfo("ru-ru");
SpeechRecognitionEngine sre = new SpeechRecognitionEngine(ci);
sre.SetInputToDefaultAudioDevice();
sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sre_speech);
Choices words = new Choices();
words.Add(new string[] {"Привет","Как дела","Сколько времени" });
GrammarBuilder gb = new GrammarBuilder();
gb.Append(words);
Grammar g = new Grammar(gb);
sre.LoadGrammar(g);
sre.RecognizeAsync(RecognizeMode.Multiple);
}`
Вот вводится пользователем фраза(например, спрашивается , сколько времени) , а ответ должен выводится не сразу, через некоторое время (как некая симуляция обдумывания)
Почему бы не сделать ваш sre_speech
асинхронным? (кстати, вы уверены, что обработчик должен быть static
? Тогда что такое t
и как оно объявлено?)
private async void sre_speech(object sender,SpeechRecognizedEventArgs e)
{
...
await Task.Delay(1500); // вместо Thread.Sleep(1500);
...
}
Update:
Как верно заметил @klutch1991, если все-таки t
- ссылка на UI контрол, то в итоге это будет выглядеть так:
private async void sre_speech(object sender,SpeechRecognizedEventArgs e)
{
string answer="Извини, не поняла";
if (e.Result.Confidence > 0.82)
{
AppendTextToChat("Ivan", e.Result.Text);
switch (e.Result.Text)
{
...
}
}
await Task.Delay(1500);
AppendTextToChat("Caroline", answer);
}`
private void AppendTextToChat(string name, string text)
{
Application.Current.Dispatcher.Invoke(
() => t.Text += $"{name}:>{text}{Environment.NewLine}");
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Проблема: отправляю данные с сервера на клиент (оба на локальной машине) и часть данных клиент не успевает обработать/принять в буферИногда...
В проекте имеется много разных сущностей, которые надо отображать и списком в таблице и подробно и иметь возможность каждую правитьДля этого...
В Nuget сейчас обе библиотеки имеют достаточно свежие версии