Проще говоря, все это нужно делать асинхронно.Ваш пользовательский интерфейс зависает (не отстает - отставание подразумевает, что он идет медленно, но он движется, он просто отстает), потому что поток, который обычно будет занят рисованием пользовательского интерфейса и продолжает его отвечать, ожидает подключения для подключения, а затем отправляети получение данных
Там, где вы сказали Connect
, Send
и Receive
, они должны быть ConnectAsync
, SendAsync
и ReceiveAsync
.Вам нужно будет внести другие изменения в код, чтобы использовать асинхронные методы, такие как пометка собственных методов как асинхронных и использование ключевого слова await
перед вызовами методов, которые могут блокировать.
При переключении на использование xAsync
методовкогда ваш пользовательский интерфейс будет заблокирован в ожидании завершения соединения или передачи данных, код приостановит выполнение своих действий и вернется к рисованию пользовательского интерфейса.Когда данные доступны и т. Д., Они будут отозваны до того места, где они остановились, и продолжат обработку
Я также рекомендую вам не пытаться вызывать SendLoop
вне проверки, является ли сокетсвязной ..