UWP streamsocket ping networktimer проблемы

У меня есть StreamSocket в UWP, и я отправляю свои сообщения, используя объект DataWriter, используя метод StoreAsync():

        public static async Task<bool> SendNetworkMessage(NetworkMember member, NetworkMessage message)
    {
        DataWriter writer = member.DataWriter;

        //Check that writer is not null
        if (writer != null)
        {
            try
            {
                //Serialize Message
                string stringToSend = SerializeObject<NetworkMessage>(message);

                //Send Message Length
                writer.WriteUInt32(writer.MeasureString(stringToSend));

                //Send Message
                writer.WriteString(stringToSend);

                await writer.StoreAsync();


                return true;
            }
            catch (Exception e)
            {

                Debug.WriteLine("DataWriter failed because of " + e.Message);

                Debug.WriteLine("");

                Disconnect(member);

                OnMemberDisconnectedEvent(member);
                return false;
            }
        }
        else { return false; }
    }

Все хорошо, единственная проблема в том, что я не знаю, прервалась ли связь. Теперь я хочу проверить свое соединение с помощью DispatcherTimer следующим образом:

        private static async void NetworkTimer_Tick(object sender, object e)
    {
        foreach (NetworkMember member in networkMemberCollection)
        {
            if (member.Connected == true && member.Disconnecting == false)
            {
                await SendNetworkMessage(member, new PingMessage());

            }
        }}

Однако это вызывает проблемы со временем, которые вызывают ObjectDisposedExceptions в DataWriter. Кажется, что поток DispatcherTimer не может использовать StreamSocket, когда я отправляю сообщение из другого потока. Мой вопрос: как я могу убедиться, что Ping отправляется каждый раз, но операции SendNetworkMessage выполняются по порядку, а не перекрываются?

Спасибо


person WJM    schedule 20.07.2016    source источник


Ответы (1)


Кажется, что поток DispatcherTimer не может использовать StreamSocket, когда я отправляю сообщение из другого потока.

Как я могу убедиться, что Ping отправляется каждый раз, но операции SendNetworkMessage выполняются по порядку, а не перекрываются?

Это возможно, и я думаю, что ваш код, использующий операции foreach и await, может обеспечить работу по отправке сообщений по порядку.

единственная проблема в том, что я не знаю, прервалось ли соединение.

Если вы хотите узнать, прервалось ли соединение, вы можете обратиться к Обработка отключений WinRT StreamSocket (как на стороне сервера, так и на стороне клиента).

person Grace Feng    schedule 21.07.2016