Hallo,
ich bin dabei ein Programm fertig zu schreiben mit der ich Nachrichten an anderen Rechner(n) im Netzwerk schicken kann. Der Rechner am anderen Endpunkt wartet mit der Methode
StartListener auf ankommende Nachrichten.
Die grafische Oberfläche besteht aus einem Hauptfenster mit der ich Nachrichten schicken kann und einem Nebenfenster, das sich automatisch öffnet, wenn eine Nachricht ankommt.
Das Problem liegt nun bei der Verwendung der Methode StartListener. Bei mir sieht es abgeändert wie folgt aus:
private void StartListener()
{
bool done = false;
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, port_nr);
try
{
while (!done)
{
byte[] bytes = udp_client.Receive(ref groupEP);
nachricht = new Nachricht();//Nebenfenster
nachricht.main_window_ref = this;
//Nachricht ausgeben
nachricht.TextBoxNachricht.Text = Encoding.ASCII.GetString(bytes, 0, bytes.Length);
nachricht.ShowDialog();
}
}
catch (Exception e)
{
nachricht.TextBoxNachricht.Text = e.ToString();
}
finally
{
udp_client.Close();
}
}
Nun gilt es, die Methode im Hintergrund laufen zu lassen, damit sie auf ankommende Nachrichten lauscht. Aber die Frage ist wo?
Wenn ich sie in der "MainWindow" aufrufe, so wie folgt:
public MainWindow()
{
InitializeComponent();
StartListener();
}
Bleibt mein Programm hängen, da die Methode eine Endlosschleife besitzt und aus der nicht rauskommt.
Mir kam die Idee die Methode in einem neuen Thread laufen zu lassen:
public MainWindow()
{
InitializeComponent();
myThread = new Thread(StartListener);
myThread.Start();
}
Nun kann ich im Hauptfenster normal arbeiten und Nachrichten schicken. Allerdings öffnet sich das Nebenfenster zum empfangen der Nachrichten nicht wenn eine neue Nachricht ankommt. Was mache ich falsch oder was wären andere Lösungen zu diesem Problem?