вызов функции после завершения функции

#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:

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

После завершения обработки задачи вы можете присоединить ее обратно к основному потоку.