Не выводит 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 шт):

Автор решения: BluzSter

Дело оказало не в 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.

→ Ссылка