UWP的流量ping ping网络时间问题

时间:2016-07-20 11:35:12

标签: sockets asynchronous uwp dispatchertimer

我在UWP中有一个StreamSocket,我使用StoreAsync()方法使用DataWriter对象发送这样的消息:

http

一切都很好,唯一的问题是我不知道连接是否断开。 现在我想使用DispatcherTimer检查我的连接,如下所示:

        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; }
    }

但是,这会导致在DataWriter上导致ObjectDisposedExceptions的计时问题。当我从另一个线程发送消息时,似乎DispatcherTimer线程无法使用StreamSocket。我的问题是:如何确保每次都发送Ping,但SendNetworkMessage操作是按顺序完成而不是重叠?

由于

1 个答案:

答案 0 :(得分:0)

  

当我从另一个线程发送消息时,似乎DispatcherTimer线程无法使用StreamSocket。

     

如何确保每次都发送Ping,但SendNetworkMessage操作是按顺序完成而不是重叠?

这是可能的,我认为使用foreachawait操作的代码可以确保按顺序发送邮件的工作。

  

唯一的问题是我不知道连接是否已关闭。

如果您想知道连接是否已关闭,可以参考Handling WinRT StreamSocket disconnects (both server and client side)