我在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操作是按顺序完成而不是重叠?
由于
答案 0 :(得分:0)
当我从另一个线程发送消息时,似乎DispatcherTimer线程无法使用StreamSocket。
如何确保每次都发送Ping,但SendNetworkMessage操作是按顺序完成而不是重叠?
这是可能的,我认为使用foreach
和await
操作的代码可以确保按顺序发送邮件的工作。
唯一的问题是我不知道连接是否已关闭。
如果您想知道连接是否已关闭,可以参考Handling WinRT StreamSocket disconnects (both server and client side)。