Не выводит String в C# Texbox.Text (WPF)
Столкнулся с не понятной для меня проблемой. В двух случаях:
1) Не обновляется TextBox по DispatcherTimer.
private DispatcherTimer SetTimer(int interval)
{
DispatcherTimer timer = new DispatcherTimer();
timer.Tick += new EventHandler(TimerExecutionEvent);
timer.Interval = new TimeSpan(0, 0, interval);
return timer;
}
private void TimerExecutionEvent(Object source, EventArgs e)
{
TimerExceptionBox.Text = String.Format("{0:HH:mm:ss.fff}",e.ToString()).ToString());
}
2) Просто не выводит текст через Text Box:
OutDialogText.Text = Environment.NewLine + "Sending a request...";
Оба события запускаются по очереди сначала 1, потом 2. По клику кнопки.
Ответы (1 шт):
Дело оказало не в TextBox.Text, а в том что метод Task.Wait блокировал UI-поток. Для решения я заменил Wait на await. Еще метод который я вызывал вот так:
Task<LongRunningRecognizeResponse> task = Task.Run(() => sttg.CreateRequestAysnc(data.Client.Google, data.RecognitionConfig.Google, data.AudioConfig.Google))
Не требовал постановки в очередь для запуска в пуле потоков, по этому можно убрать Task.Run и изменить тип принимающей переменной с Task<LongRunningRecognizeResponse> на LongRunningRecognizeResponse. А так же при вызове метода добавить await.
Как было:
Task<LongRunningRecognizeResponse> task = Task.Run(() => sttg.CreateRequestAysnc(data.Client.Google, data.RecognitionConfig.Google, data.AudioConfig.Google));
task.Wait();
Как стало:
LongRunningRecognizeResponse response = await sttg.CreateRequestAysnc(data.Client.Google, data.RecognitionConfig.Google, data.AudioConfig.Google);
После этого Ui-поток разлочился. И таймер спокойно тикал в TextBox.
Отдельное большое спасибо Bulson.