【发布时间】:2016-07-21 17:51:17
【问题描述】:
我在 UWP 中有一个 StreamSocket,我使用 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());
}
}}
但是,这会导致计时问题,从而导致 DataWriter 上出现 ObjectDisposedExceptions。当我从不同的线程发送消息时,DispatcherTimer 线程似乎无法使用 StreamSocket。我的问题是:如何确保每次都发送 Ping 但 SendNetworkMessage 操作是按顺序完成而不是重叠?
谢谢
【问题讨论】:
标签: sockets asynchronous uwp dispatchertimer