Довольно классической ошибкой является использование Control :: Begin / Invoke () слишком часто .Вы заполняете поток пользовательского интерфейса запросами на делегирование.Обновления пользовательского интерфейса, как правило, стоят дорого, вы легко можете попасть в состояние, когда цикл обработки сообщений не справляется со своими низко приоритетными обязанностями.Как живопись.Это происходит легко, вызывая более тысячи раз в секунду как опасную зону, в зависимости от того, сколько времени затрачивается на цели делегата.
Вы решаете эту проблему, отправляя обновления с реалистичной скоростью, которая использует преимуществао способности человеческого глаза различать их.При 25 разах в секунду обновления превращаются в размытие, обновление происходит быстрее, это просто пустая трата циклов процессора.Это оставляет много времени для потока пользовательского интерфейса, чтобы сделать то, что ему нужно сделать.
Это может все еще быть недостаточно медленным, когда обновления стоят дорого.В этот момент вам нужно пропустить обновления или ограничить рабочий поток.Обратите внимание, что Invoke () автоматически регулирует скорость, а BeginInvoke () - нет.