Сложно объяснить проблему в названии. У меня есть следующий сценарий для решения в приложении Windows Form.
Необходимые шаги:
- Пользователь нажимает кнопку «Отправить». Запрос в виде простого текста с использованием TCP
сокет отправляется на сервер.
- Пока сервер занят обработкой запроса (до тех пор, пока клиентский сокет не получит ответ), пользовательский интерфейс Windows должен реагировать.
Пользователь сможет отправить еще один простой текст, пока не получен ответ на 1-й запрос.
Сервер сначала ответит на второй запрос. затем
вернуть ответ на первый запрос.
Вот изображение сценария. Изображение [b] больше соответствует проблеме.
Подход, который я пробовал, таков.
- Я сделал асинхронный TCP-сокет на стороне клиента. Сделал объект сокета статическим.
- Сделал BackgroundWorker для предотвращения зависания пользовательского интерфейса во время обработки запроса сокета.
- Отправьте второй
socket.send(byte)
, используя уже инициализированный / подключенный сокет.
Тем не менее, этот подход дает сокет исключения
A blocking operation was interrupted by a call to WSACancelBlockingCall
Я не уверен, как подойти к решению этой проблемы. Я думаю, что такой сценарий не так уж редок, и многие уже сделали подобные вещи. Требуется консультация специалиста.