Проблема окна консоли C # с _getch () - PullRequest
0 голосов
/ 10 августа 2010

Я встроил консольное окно в форму приложения Windows, используя С #

У меня есть приложение, которое запускается в окне консоли.Мой проект на c # представляет собой графический интерфейс для отображения выходных данных этого параметра, а также для отправки ему параметров.

Большинство работает нормально, за исключением случаев, когда вызов _getch () выполняется из моего графического интерфейса пользователя в окно консоли, к которому он стремитсязаморозить всю систему.

у кого-нибудь есть идеи, почему это произойдет?

Я могу отправить код, если это будет необходимо.

Спасибо

Ответы [ 3 ]

2 голосов
/ 10 августа 2010

Скорее всего, _getch() является блокирующим вызовом.

0 голосов
/ 10 августа 2010

Функция _getch () не вернется, пока пользователь не нажмет на клавиатуре клавишу ввода.Если эта функция вызывается из основного потока вашей программы, то это остановит поток пользовательского интерфейса.Он не прокачает цикл сообщений, ваш пользовательский интерфейс зависнет, когда он больше не обрабатывает входные события и не рисует окна.Через пару секунд Windows помещает призрачное окно с надписью «Не отвечает» в строке заголовка.

Хотя вызов _getch () из фонового потока решит проблему, это, вероятно, не будет удобно.Вы можете использовать _kbhit (), чтобы проверить, доступно ли нажатие клавиши.Вызов _getch () после того, как _kbhit () вернет true, не блокируется.Наверное, тоже не удобно.Попытка прокачать цикл сообщений, пока _kbhit () возвращает false, технически была бы решением, если бы не цикл сообщений, содержащий неправильный код.

Обратите внимание, что вы можете ввести Ctrl + S в консолиокно, чтобы приостановить вывод, Ctrl + Q возобновляет его снова.Вы по-прежнему будете блокировать поток пользовательского интерфейса, но, по крайней мере, будете делать это сознательно.

0 голосов
/ 10 августа 2010

Что делает _getch (). Вы можете начать вызов в другом потоке, если он блокирует поток пользовательского интерфейса.

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