Тайм-аут сокета - PullRequest
       13

Тайм-аут сокета

0 голосов
/ 23 декабря 2011

У меня проблема с обнаружением потери соединения с сокетом в приложении CF для устройства PDA. У меня есть статический класс, который имеет статические методы для связи (Connect (), Write (), Disconnect ()). Статический, потому что все формы могут вызывать метод Write.

В методе Connect я вызываю socket.Connect (ipEndpoint); Но когда устройство не подключено к Wi-Fi, программа останавливается на этой линии примерно на 20 с, что слишком долго. Также, если пользователь запускает метод Write () (сохраняя некоторые данные) и соединение Wi-Fi теряется, пользователь не может взаимодействовать с формой и думает, что приложение перегнуло. Поскольку для соединения с CF-сокетом нет времени ожидания, каков наилучший способ управления поведением сокета? Моя идея состоит в том, чтобы показать какую-то «форму связи», когда сокет не отвечает в течение 5 секунд, что попытается восстановить соединение. Эта форма будет иметь графический индикатор (вращающиеся часы или что-то в этом роде), чтобы показать пользователю, что программа пытается подключиться, и кнопку выхода, если пользователь решает выйти из приложения. Если socket.connect завершится успешно, я покажу пользователю последнюю использованную форму. Я предполагаю, что это должно быть сделано с потоками, но так как у меня нет опыта с этим. Мне нужна помощь, как управлять этим поведением.

1 Ответ

0 голосов
/ 20 января 2012

Вы можете вызвать Socket.BeginConnect (), чтобы запустить соединение в фоновом режиме.Затем вы можете указать метод обратного вызова, который будет вызываться при подключении сокета (или превышении времени ожидания).Кроме того, для реализации вашего индикатора выполнения, который выполняет обратный отсчет при попытке подключения, вы можете сделать::

ar.IsComplete

Опрос не очень эффективен, но в этом случае он хорошо работает с описанной вами всплывающей формой подключения.

...