Windows Forms: индикатор выполнения не отвечает - PullRequest
4 голосов
/ 23 декабря 2008

У меня есть небольшое приложение для преобразования нескольких форматов файлов с формой главного окна, которая содержит несколько текстовых полей, кнопок и т. Д. У меня есть еще один класс «Document», который обрабатывает всю фактическую работу по преобразованию, и моя форма по существу повторяется через все файлы, и вызывает надлежащие методы Document для преобразования файлов. Однако пока это происходит, форма перестает отвечать. Я создал еще одну простую форму с индикатором выполнения и кнопкой отмены, которая будет появляться, когда преобразование начнет давать обратную связь нашим (легко испуганным) пользователям. Однако, когда загружается новая форма, все элементы управления являются белыми прямоугольниками, и она тоже перестает отвечать. После завершения преобразования индикатор выполнения закрывается должным образом, и основная форма снова становится отзывчивой.

Существует ли простой способ сделать эти две формы независимыми, чтобы индикатор выполнения мог работать даже тогда, когда другая форма не отвечает?

Ответы [ 4 ]

7 голосов
/ 23 декабря 2008

Самое простое решение - выполнить обработку в фоновом потоке с использованием компонента BackgroundWorker . Вы можете перетащить его из панели инструментов VS. Он позволяет вам обновлять поток пользовательского интерфейса с помощью уведомлений о прогрессе, чтобы вы могли обновлять свой индикатор выполнения, чтобы отображать реалистичные значения (что-то гораздо более удобное для пользователя, чем наличие индикатора выполнения в стиле "marquee").

0 голосов
/ 23 декабря 2008

Самое простое решение - выполнить обработку в фоновом потоке с использованием компонента BackgroundWorker. Вы можете перетащить его из панели инструментов VS. Он позволяет вам обновлять поток пользовательского интерфейса с помощью уведомлений о прогрессе, чтобы вы могли обновлять свой индикатор выполнения, чтобы отображать реалистичные значения (что-то гораздо более удобное для пользователя, чем индикатор выполнения в стиле «marquee»).

0 голосов
/ 23 декабря 2008

Просто вызывайте Application.DoEvent () время от времени, возможно, в вашем цикле. Не так хорошо, как BackgroundWorker, но еще проще.

0 голосов
/ 23 декабря 2008

Вы должны использовать два потока, чтобы форма продолжала отвечать, пока вы работаете.

Это так часто встречается, что .NET имеет элемент управления BackgroundWorker, который оборачивает некоторые из вас для вас.

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