Как заблокировать UI Winforms, в то время как фоновый поток работает

Если я правильно понимаю, похоже, что вы не понимаете, как работает оператор перенаправления. > начинается с нового, >> добавляется. Простое переключение на соответствующего оператора решит вашу проблему.

@Echo Off
Set "log="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy/NJH /L "\|" Null'
)Do If Not Defined log Set "log=StackProcess%%A%%B%%C.log"

Echo Stopping the StackProcess
"%__AppDir__%InetSrv\AppCmd.exe" Stop AppPool /apppool.name:StackProcess
Echo %DATE% %TIME% - Service Stopped Successfully>"%log%"
Echo StackProcess Stopped
Timeout 5 /NoBreak>Nul

Echo Starting the StackProcess
"%__AppDir__%InetSrv\AppCmd.exe" Start AppPool /apppool.name:StackProcess
Echo %DATE% %TIME% - Service Restarted Successfully>>"%log%"
Echo StackProcess Restarted
Timeout 2 /NoBreak>Nul

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

10
задан froh42 15 March 2009 в 18:11
поделиться

4 ответа

Единственным путем я знаю о, должен получить некоторые/все средства управления, как отключено. Однако в зависимости от того, как средства управления размечаются, не необходимо установить каждое управление, как отключено - когда контейнерное управление отключено, затем все его дети отключены, также. Например, если у Вас есть a GroupBox с некоторыми средствами управления, если Вы устанавливаете GroupBox к отключенному, затем все средства управления в GroupBox будет отключен, также.

6
ответ дан 3 December 2019 в 22:39
поделиться

Выберите некоторое верхнее управление контейнером уровня (могла бы быть сама форма), и установите, это имеет свойство Enabled ко лжи. Все средства управления, помещенные в то управление, будут отключены, который будет препятствовать тому, чтобы они получили вход.

5
ответ дан 3 December 2019 в 22:39
поделиться

На уровне API Win32 существует функция EnableWindow, можно отключить любую руку окна с (необходимо получить базовый дескриптор главного окна, конечно, и любых других высокоуровневых окон). Я не протестировал его в WinForms, все же. (Я вполне уверен на уровне User32 существуют другие ответы, но я не могу помнить вызовы API прямо сейчас.)

Примечание: это не отображает средства управления серым, который уменьшает его утилиту с точки зрения удобства использования (пользователь просто видит 'замороженное приложение'). Становится незначительно лучше, если Вы, по крайней мере, устанавливаете курсор в форме песочных часов.

Однако это - быстрый-и-грязный способ иметь дело с асинхронной обработкой. Необходимо ли действительно заблокировать пользователя из целого приложения? Возможно, это - всего несколько функций, которые должны быть запрещены, в то время как запрос идет полным ходом?

1
ответ дан 3 December 2019 в 22:39
поделиться

К сожалению, с WinForms, необходимо будет, вероятно, отключить/разрешить кнопки в единственном общем методе. Это - одно из преимуществ, которые WPF приносит по формам окон - намного легче обработать эти ситуации.

Что касается не блокирования Вашего UI - необходимо будет переместить вызовы в модель асинхронного программирования. В Вашем случае я рекомендовал бы смотреть на ThreadPool.

Вы захотите сделать что-то, любят, имеют кнопку, отключают Ваши средства управления, вызывают Вашу операцию на пуле потоков, затем повторно включают им на завершении.

0
ответ дан 3 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: