still locking up when disposing, because the log callback is trying to write to the...
[deb_libcec.git] / src / LibCecTray / ui / CECTray.cs
index 8df996ecc374d6e786f3a0f526bcc2e3c472949c..021eaa38e55d5d18c2bd89cdabc6036bc8ef6e90 100644 (file)
@@ -41,6 +41,7 @@ using LibCECTray.settings;
 using Microsoft.Win32;
 using System.Security.Permissions;
 using System.Runtime.InteropServices;
+using System.Threading;
 
 namespace LibCECTray.ui
 {
@@ -57,6 +58,21 @@ namespace LibCECTray.ui
     XBMC
   }
 
+  class AsyncDisconnect
+  {
+    public AsyncDisconnect(CECController controller)
+    {
+      _controller = controller;
+    }
+
+    public void Process()
+    {
+      _controller.Close();
+    }
+
+    private CECController _controller;
+  }
+
   /// <summary>
   /// Main LibCecTray GUI
   /// </summary>
@@ -177,7 +193,8 @@ namespace LibCECTray.ui
       if (disposing)
       {
         Controller.CECActions.SuppressUpdates = true;
-        Controller.Close();
+        AsyncDisconnect dc = new AsyncDisconnect(Controller);
+        (new Thread(dc.Process)).Start();
       }
       if (disposing && (components != null))
       {