Окно C # становится пустым, когда занято -> Progressbar?Но как? - PullRequest
8 голосов
/ 19 августа 2011

У меня есть программа, которая выполняет некоторые задания копирования (через File.Copy), которые могут длиться несколько минут. Когда в это время пользователь выводит другое окно на передний план, окно программы становится пустым, поскольку оно не перерисовывается.

Теперь я хочу показать ProgressBar в дополнительном окне в центре экрана, но это окно тоже пусто.

Поэтому я запустил его в другой ветке, которая не помогла.

Я вполне уверен, что кто-то делал это раньше, но я не могу найти рабочий пример. Есть идеи?

Ответы [ 4 ]

4 голосов
/ 19 августа 2011

В документации есть хороший пример BackgroundWorker class .

0 голосов
/ 19 августа 2011

Вы должны выполнить свою операцию с помощью BackgroundWorker.Существуют и другие способы выполнения операции, но этот, вероятно, является самым простым, и он продолжит выполнять накачку сообщений на переднем плане, поэтому Windows не думает, что ваше приложение перестало отвечать.

Другой вариант -используйте Thread и Thread.Join для ожидания завершения фоновой задачи, поскольку Thread.Join также отправляет стандартную информацию о насосе сообщений в Windows в ожидании.

0 голосов
/ 19 августа 2011

ChrisF правильно. Ваша длинная операция должна быть выполнена в потоке BackgroundWorker . Вы можете использовать BackgroundWorker, чтобы сообщить о прогрессе, и подключить его к индикатору выполнения в вашей форме.

0 голосов
/ 19 августа 2011

Вы можете использовать класс BackgroundWorker.

См. ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...