#c# #user-interface
#c# #пользовательский интерфейс
Вопрос:
первый постер здесь!
Я студент старшего курса информатики, и в настоящее время я разрабатываю графический интерфейс, который играет в настольную игру (отелло) онлайн с помощью telnet.
псевдо — это что-то вроде этого…
- нажмите кнопку
- обновить графический интерфейс
- получение входных данных telnet
- обновить графический интерфейс
промойте и повторите!
проблема в том, что единственный известный мне способ запустить функцию telnet — это поместить ее в обработчик события Click, но графический интерфейс не будет обновляться, пока не будет завершена вся функция. Это означает, что он обновляется каждые два хода вместо одного. Есть ли способ сообщить C # (с которым я новичок) немедленно вызвать новую функцию после ее завершения? в частности, в графическом интерфейсе.
любой ввод приветствуется, спасибо
Комментарии:
1. Вам нужно использовать потоки.
2. Если вы используете .NET 4, тогда переходите на TPL! Некоторые расширения Rx больше не поддерживают TPL API!
Ответ №1:
Я не уверен, что правильно понял проблему, но строка «receive telnet input» заставляет меня сильно беспокоиться.
Вы пишете это приложение в одном потоке без использования какой-либо асинхронной связи TCP / IP?
Если ответ положительный, ошибка в используемой вами архитектуре.
Вам нужна асинхронная связь по протоколу tcp / ip, например, с другим потоком, работающим параллельно, с асинхронными сокетами или с асинхронными потоками.
Вы не можете остановить графический интерфейс в ожидании сети, это была бы плохая архитектура.
Попробуйте прочитать эту простую, но полную статью о codeproject: http://www.codeproject.com/KB/IP/socketsincs.aspx
ОС Windows использует для обработки Windows так называемую «перекачку сообщений». Все это сообщение, которое обрабатывается одним потоком (потоком вашего приложения). События помещаются в очередь сообщений. Если вы слишком долго останавливаете выполнение основного потока, вы останавливаете обработку очереди сообщений, и это остановит ввод данных пользователем, а также рисование, поскольку рендеринг также является сообщением Windows, которое может быть поставлено в очередь.
Комментарии:
1. Хорошо, это потоки! Спасибо, я рассмотрю это завтра. Я действительно ценю быстрые и четкие ответы!
Ответ №2:
Вам нужно будет использовать потоки. Таким образом, пока один поток все еще обрабатывает, вы можете запустить новый поток. Я думаю, что это единственный способ, которым вы сможете одновременно завершить обработку одной задачи, одновременно запуская другую.
После завершения обработки задачи вы можете присоединить ее обратно к основному потоку.