вызов функции после завершения функции - PullRequest
0 голосов
/ 31 октября 2011

Первый постер здесь!

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

псевдо-что-то вроде этого ...

  • нажмите кнопку
  • обновление графического интерфейса
  • получить входной телнет
  • обновление графического интерфейса

промыть и повторить!

проблема в том, что единственный способ узнать, как заставить работать функцию telnet, это поместить ее в обработчик события Click, но графический интерфейс не будет обновляться, пока вся функция не будет завершена. Это означает, что он обновляется каждые два хода вместо одного. Есть ли способ сказать C # (что я новичок) для вызова новой функции сразу же после ее завершения? специально на GUI.

ценится любой вклад Спасибо

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Я не уверен, что правильно понял проблему, но строка «получить входящий телнет» заставляет меня сильно волноваться.

Вы пишете это приложение в одном потоке без использования какого-либо асинхронного соединения TCP / IP?

Если ответ положительный, ошибка в используемой вами архитектуре.

Вам необходима асинхронная связь tcp / ip, например, с другим параллельным потоком, с асинхронными сокетами или с асинхронными потоками.

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

Попробуйте прочитать эту простую, но полную статью о проекте кода: http://www.codeproject.com/KB/IP/socketsincs.aspx

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

0 голосов
/ 31 октября 2011

Вам нужно будет использовать темы.Таким образом, пока один поток еще обрабатывает, вы можете запустить новый поток.Я думаю, что только так вы сможете одновременно завершить обработку одной задачи и одновременно запустить другую.

Как только задача завершена, вы можете присоединить к ее главному потоку.

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