Приложение Winform с асинхронно обновляемыми зависаниями TextBox (не отвечает) при фокусировке после минимизации - PullRequest
0 голосов
/ 07 июня 2018

C # Winform Приложение Visual Studio зависает с «Не отвечает» после нескольких часов использования, и во всплывающем окне Windows появляется закрывающее приложение.Это часто происходит при инициализации удаленного рабочего стола на компьютере или при фокусировке окна приложения после минимизации.

Приложение использует полный процессор при фокусировке и постепенно замедляется в этом процессе.

Форма Windows представляет собой многопоточный графический интерфейс для управления устройством через RS232.Он использует текстовое поле для вывода отладки несколько раз в секунду.Запись в текстовое поле выполняется асинхронным методом.

void asyncAppendTextBox(TextBox tb, string str) { if (IsHandleCreated) { tb.BeginInvoke( new Action(() => { tb.AppendText(str + appLifetimeSW.ElapsedMilliseconds.ToString()); } )); } }

1 Ответ

0 голосов
/ 07 июня 2018

В конце концов, ответ на эту проблему был довольно прост.Текстовое поле просто переполнялось текстом и, в конечном итоге, занимало> минуты, чтобы перекрасить все, когда возвращалось к фокусу.Сначала это ускользнуло от меня, потому что текстовое поле не создавало проблем с функцией AppendText ().После нескольких часов работы программы объем текста фактически зависал для зависания приложения (согласно Windows).

Простым решением было вместо этого записать в массив строк и установить текст в текстовом поле.через 'Textbox.SetText (string [])' в методе асинхронного вызова.Я дополнительно сдвигаю массив на единицу и записываю в последний элемент массива, чтобы он соответствовал внешнему виду AppendText ().

Больше никаких зависаний и приложение реагирует.

...