WPF Animated ProgressBar в приложении WinForms

У меня есть приложение WinForms, и я хочу добавить несколько хороших элементов управления WPF, один из которых является "неопределенным" индикатором выполнения, который просто анимирует, пока я не остановлюсь.

Я сделал это, и ломал голову о том, почему он не оживляет (изменение значения индикатора прогресса).

В конце концов, я попытался показать свою форму (содержащую ElementHost) по-разному, и hey presto, она оживляет, но я хочу показать форму немодально, так как хочу продолжить обработку за кулисами.

Есть ли какая-то настройка, которая сообщает окну ElementHost продолжить анимацию?

Спасибо, Rich.

2 ответа

Как я упоминал в своем комментарии выше, решение состоит в том, чтобы запустить обработку в потоке separte, что позволяет использовать основной поток графического интерфейса.net, а также оживить индикатор выполнения.


Существует много способов сделать это, самым простым из них является использование фонаря для выполнения длительной задачи. У Фонового Работника есть событие, чтобы сообщить о прогрессе. Обработайте это событие, и в обработчике измените его значение progressbar. Просто наличие анимации в основном потоке, продолжая работу над основным потоком, не будет работать правильно... Еще один пример, который вы можете попробовать (хотя это не то, что я бы рекомендовал для искупительного приложения) - это реализовать функцию DoEvents и вызвать ее в основном потоке, когда вы хотите обновить индикатор выполнения. Вот ссылка на DoEvents: MSDN DoEvents sugestion Я бы настоятельно рекомендовал первый подход, хотя

licensed under cc by-sa 3.0 with attribution.