내가 UWP에 StreamSocket을 발행하고 나는 StoreAsync를 사용하여 DataWriter 객체를 사용하여이처럼 내 메시지를 보내() 메소드 :UWP streamsocket 핑 networktimer이
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 작업이 겹치기보다는 순서대로 수행되도록하려면 어떻게해야합니까?
감사