ich eine StreamSocket in UWP haben und ich sende meinen Meldungen wie diese ein Datawriter Objekt mit dem StoreAsync() -Methode:UWP streamsocket ping networktimer gibt
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; }
}
Alles ist gut, das einzige Problem ist, dass ich don Ich weiß nicht, ob eine Verbindung unterbrochen wurde. Jetzt möchte ich meine Verbindung mit einem DispatcherTimer wie folgt überprüfen:
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());
}
}}
Doch diese Timing-Probleme verursacht, die ObjectDisposedExceptions auf dem Datawriter verursacht. Es scheint, dass der DispatcherTimer-Thread den StreamSocket nicht verwenden kann, wenn ich eine Nachricht von einem anderen Thread sende. Meine Frage ist: Wie kann ich sicherstellen, dass der Ping jedes Mal gesendet wird, aber dass SendNetworkMessage-Vorgänge in Reihenfolge statt überlappend ausgeführt werden?
Dank