DraconiX
2011-12-17, 14:45:13
Momentan habe ich das in einer Konsolenanwendung folgendermaßen erledigt:
private static void StartListener()
{
bool done = false;
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
try
{
Console.WriteLine("Waiting for broadcast");
while (!done)
{
byte[ ] bytes = listener.Receive(ref groupEP); //<--- hier wird gewartet!
Single testDouble1 = Convert.ToInt32((BitConverter.ToSingle(bytes, 28) * 3.6f));
Single testDouble2 = (BitConverter.ToSingle(bytes, 132));
Single testDouble3 = Convert.ToInt32((BitConverter.ToSingle(bytes, 148) * 10.0f));
Console.WriteLine("{0} - {1} - {2}", (testDouble1 + 0), testDouble2, testDouble3);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
listener.Close();
}
}
Nun ist dort das Problem, das an dem Punkt (hier wird gewartet) natürlich die Anwendung gestoppt wird, auf ein Paket gewartet wird, und dann weiter ausgeführt wird. Wenn ich nun aber diese Funktion in eine WindowsForm Anwendung übernehme, dann bleibt dort natürlich die gesamte Abarbeitung der Form stehen.
Gibt es für den UDPClient einen Event welcher nur aufgerufen wird wenn ein Paket eintrifft?! Wenn ja wie gehe ich da vor?! Oder anderer Ansatzpunkt: Kann man dafür einen eigenen Thread erstellen?!
Vielen Dank für eure Hilfe!
private static void StartListener()
{
bool done = false;
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
try
{
Console.WriteLine("Waiting for broadcast");
while (!done)
{
byte[ ] bytes = listener.Receive(ref groupEP); //<--- hier wird gewartet!
Single testDouble1 = Convert.ToInt32((BitConverter.ToSingle(bytes, 28) * 3.6f));
Single testDouble2 = (BitConverter.ToSingle(bytes, 132));
Single testDouble3 = Convert.ToInt32((BitConverter.ToSingle(bytes, 148) * 10.0f));
Console.WriteLine("{0} - {1} - {2}", (testDouble1 + 0), testDouble2, testDouble3);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
listener.Close();
}
}
Nun ist dort das Problem, das an dem Punkt (hier wird gewartet) natürlich die Anwendung gestoppt wird, auf ein Paket gewartet wird, und dann weiter ausgeführt wird. Wenn ich nun aber diese Funktion in eine WindowsForm Anwendung übernehme, dann bleibt dort natürlich die gesamte Abarbeitung der Form stehen.
Gibt es für den UDPClient einen Event welcher nur aufgerufen wird wenn ein Paket eintrifft?! Wenn ja wie gehe ich da vor?! Oder anderer Ansatzpunkt: Kann man dafür einen eigenen Thread erstellen?!
Vielen Dank für eure Hilfe!