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





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