Sieht nach nem Deadlock aus. Eventuell liegts an dem Zusammenspiel von Invoke (der Threadwechsel von Thread X auf UI-Thread) und der Implementierung von Disconnect:
Aus den C# Bindings IpConnection.cs
/// <summary>
/// Disconnects the TCP/IP connection from the Brick Daemon or the
/// WIFI/Ethernet Extension.
/// </summary>
public void Disconnect()
{
/* Der Übersicht halber rausgelöscht*/
if (Thread.CurrentThread != localCallback.thread)
{
localCallback.thread.Join();
}
}
Meine Theorie wäre:
Durch den Callback sind wir im Moment des Aufrufs nicht auf dem UI-Thread. Das obere Snippet wartet auf die Beendigung dieses Threads. Gleichzeitig versuchen wir aber im Callback auf den UI-Thread zurückzuwechseln, was mMn nicht klappen kann, da dieser Thread durchs .Join() aus der Diconnect-Methode blockiert ist.
Kann sein, dass meine Theorie Müll ist, mit einem BeginInvoke()-Call statt des Invoke()-Calls sollte es aber funktionieren.
Mich würde noch interessieren, für was der Thread.Join() im Disconnect überhaupt drin ist.
Grüße,
oro
edit: Hier findest ne Erklärung zum Unterschied von BeginInvoke/Invoke:
https://stackoverflow.com/questions/229554/whats-the-difference-between-invoke-and-begininvoke