Windows Forms: почему через некоторое время вывод в текстовое поле долгого алгоритма прекращается? - PullRequest
3 голосов
/ 15 ноября 2010

Я написал приложение .NET с графическим интерфейсом Windows Forms.Приложение запускает длительный алгоритм в основном потоке графического интерфейса (второй поток не создается).

Алгоритм записывает информацию о ходе выполнения с помощью System :: Console.System.Console перенаправляется в TextBox с помощью System.Console.SetOut ().

В течение первых 10-30 секунд все работает нормально и все записывается в TextBox.Однако через некоторое время TextBox зависает и больше не отображает журналы - недостающие журналы печатаются сразу после остановки алгоритма.

Вопрос: почему это работает некоторое время, а затем останавливается??В моем понимании это должно либо работать, либо не работать.

PS: Я понимаю, что этот вид проблемы лучше всего решить, используя второй рабочий поток алгоритма и некоторых делегатов для распечатки журнала.Но это экспериментальный код, и мне просто любопытно, почему он работает некоторое время, а затем останавливается.

Ответы [ 2 ]

1 голос
/ 15 ноября 2010
  1. Поскольку вы «съедаете» все циклы ЦП и не разрешаете Windows обновлять пользовательский интерфейс.
    Работа многопоточных или обычных вызовов на Application.DoEvents даст Windows разрешение на обработку очереди сообщений и обновлениеПользовательский интерфейс.
  2. Поскольку вы достигли предела текста, который может содержать текстовое поле (но в этом случае вы получите исключение).
1 голос
/ 15 ноября 2010

Добавление Application.DoEvents в длительный процесс

...