Winforms-как мне сохранить окно полностью окрашенным / отзывчивым во время выполнения длинного синхронного запроса? - PullRequest
1 голос
/ 19 марта 2010

Справочная информация. Для приложения winforms 3.5 c # я бы хотел, чтобы главное окно было полностью окрашенным / отзывчивым во время длительного синхронного запроса. Например, если пользователь перемещает окно.

Вопрос. Есть ли способ достичь этого, БЕЗ необходимости настраивать отдельный поток или процесс фонового рабочего? (например, как способ вызова из моей длительной транзакции, «освободить немного CPU для mainform», в некоторых точках)

спасибо

Ответы [ 3 ]

4 голосов
/ 19 марта 2010

Синхронный по определению означает, что вызов блокируется до завершения. Если вы заблокируете в потоке пользовательского интерфейса, то не сможете сохранить пользовательский интерфейс одновременно. Вы можете оставить его нарисованным, используя Control.Invalidate, а затем метод Control.Update, но он все равно не будет реагировать на ввод пользователя.

Так легко набрать BackgroundWorker в форме; зачем вам все равно придумывать неуклюжие обходные пути?

2 голосов
/ 19 марта 2010

Нет способа сделать это без создания нового потока, ни вручную, ни через BackgroundWorker. Именно поэтому необходима многопоточность.

Если только вы не захотите взломать, например, включить этот длительный процесс в другой исполняемый файл, и пусть ваше основное приложение вызывает этот исполняемый файл ... (но технически этот exe-файл будет иметь свой собственный поток. И проще использовать фонового работника или просто создать новый поток.) ​​

2 голосов
/ 19 марта 2010

Мне жаль говорить, что единственный способ, который я знаю, сделать то, что вы просите, - это потоковая обработка. Это болезненно и имеет целый мир препятствий, но я не верю, что есть какой-то другой путь.

С хорошей стороны, в этом современном мире опыт должен оказаться весьма полезным для вас;).

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