Вопрос

Если я зацикливаю длительную операцию (скажем, обработку файлов), и я хочу обновить строку прогресса, мне нужно использовать Doevents из того, что я могу понять.

Но вызов его во время каждого цикла функции приводит только к тому, что анимация панели прогресса воспроизводится очень быстро (или медленно, в зависимости от операции). Я понимаю, что это потому, что Doevents позволяет панели прогресса «дышать», из -за отсутствия лучшего слова, заставляя его и остальную часть формы обновлять.

У меня вопрос, как узнать, что уместно называть Doevents? Очевидно, что вы не можете просто назвать это по прихоти, однако, если вы чувствуете, что это приводит к спорадической анимации, среди прочего. Итак, есть ли какой -нибудь быстрый метод, чтобы проверить, нужен ли форме/приложению, вызванным DOEVENTS?

Это было полезно?

Решение

О, да - я просто ударил себя.

Я должен просто использовать фоновый поток для обработки, и оставить поток пользовательского интерфейса в покое.

Другие советы

Если вы не хотите возиться с темами и не возражаете против бета-тестирования, Visual Studio Async CTP Может быть, стоит посмотреть - это в основном "Doevents сделал правильный путь" (и более).

Для введения в эти новые асинхронные функции, я рекомендую проверить Блог Эрика Липперта.

Вместо того, чтобы возиться с потоками, вы можете использовать Фоновый работник. Отказ Он упрощает выполнение работы и обновления элементов управления в форме, поскольку вы не можете обновлять управление пользовательским интерфейсом непосредственно из потока без UI. Пример в DOCS обновляет управление меткой, но вы можете легко изменить его, чтобы использовать ProgressBar.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top