C # Silverlight Эквивалент Windows Form Метод? - PullRequest
3 голосов
/ 04 июня 2011

Что является эквивалентом этого:

while (Offset < packet.Data.Length)
{
    Offset += m_Socket.Receive(packet.Data, Offset, packet.Data.Length - Offset, SocketFlags.None);
}

В Силиверлайт? Это форма Windows, которая не работает с Silverlight: / Любая помощь будет принята.

Спасибо

Функция выполняет на подпрограмме «complete», я ловлю 4 байта, которые являются длиной заголовка с моего сервера, после того, как я поймал эти 4 байта, я хочу перейти в метод endReceive, который получает остальные пакеты длина.

Как бы я это сделал в Silverlight?

1 Ответ

4 голосов
/ 04 июня 2011

Silverlight не имеет синхронных методов Socket.Вам нужно будет использовать метод Socket.ReceiveAsync .

Хороший пример здесь: Отправка данных в клиент Silverlight с сокетами .

[Редактировать] Основная идея сделать что-то вроде этого:

var e = new SocketAsyncEventArgs();
e.Completed += SocketReceiveCompleted;
Socket.ReceiveAsync(e);

private void SocketReceiveCompleted(object sender, SocketAsyncEventArgs e)
{
    Offset += e.BytesTransferred;
    if (Offset > packet.Data.Length)
    {
        Socket.Close(); // or do whatever you need to do after your while loop
        return;
    }
    Array.Copy(e.Buffer, 0, packet.Data, Offset, e.BytesTransferred);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...