Ahmad Nirmo Ответов: 1

Как я могу обрабатывать длинные процессы, не вызывая замораживания (GUI)?


Всем Привет !

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

Что я уже пробовал:

Я попробовал класс BackgroundWorker . Но мне это не подходит .. потому что в моей программе я должен изменить некоторые логические значения свойств некоторых элементов управления во время длительной операции обработки , такие как свойства ( [Enabled] и [Visible] ) . И добавление элементов в ComboBox, что не разрешено в классе BackgroundWorker .


Есть ли у кого-нибудь другой способ выполнения длинных операций с возможностью изменения свойств элементов управления во время операции обработки ??

Пожалуйста, помогите мне .

Заранее благодарю вас, братья мои .

Ahmad Nirmo

Спасибо, это кажется полезным ( ^ _ ^ ).

0x01AA

Я буду счастлива, если это поможет ;)

1 Ответов

Рейтинг:
5

OriginalGriff

Используйте часть отчета о ходе выполнения фонового рабочего процесса и обновите свои элементы управления в обработчике событий - то есть снова в потоке пользовательского интерфейса, чтобы он мог получить доступ к элементам управления без каких-либо проблем. Именно для этого он и существует!

Если вы хотите "удвоить" прогресс с фактическим значением прогресса и командами "сделать эти элементы управления", передайте команды как отрицательные проценты, а значения прогресса как положительные. Быстрое перечисление и переключатель, чтобы расшифровать, какие элементы управления нужно обновить, и все готово.

Можно получить доступ к элементам управления непосредственно из BackgroundWorker, вызвав их (что временно перемещает вас обратно в поток пользовательского интерфейса), но это грязно как делать, так и из OOPs POV - фоновые задачи не должны знать об элементах управления переднего плана.


Ahmad Nirmo

Спасибо, это кажется полезным ( ^ _ ^ ).

OriginalGriff

Пожалуйста!