moved class declarations other than the main form below the main form's declaration...
[deb_libcec.git] / src / LibCecTray / ui / CECTray.cs
index 197ce32818c0d7537d2349f2f4102ce4b58f0854..740033b386539f65670bf317872fbe0116c04fa1 100644 (file)
@@ -41,22 +41,10 @@ using LibCECTray.settings;
 using Microsoft.Win32;
 using System.Security.Permissions;
 using System.Runtime.InteropServices;
+using System.Threading;
 
 namespace LibCECTray.ui
 {
-  /// <summary>
-  /// The tab pages in this application
-  /// </summary>
-  internal enum ConfigTab
-  {
-    Configuration,
-    KeyConfiguration,
-    Tester,
-    Log,
-    WMC,
-    XBMC
-  }
-
   /// <summary>
   /// Main LibCecTray GUI
   /// </summary>
@@ -174,11 +162,11 @@ namespace LibCECTray.ui
     protected override void Dispose(bool disposing)
     {
       Hide();
-      SuppressLogUpdates = true;
       if (disposing)
       {
         Controller.CECActions.SuppressUpdates = true;
-        Controller.Close();
+        AsyncDisconnect dc = new AsyncDisconnect(Controller);
+        (new Thread(dc.Process)).Start();
       }
       if (disposing && (components != null))
       {
@@ -312,9 +300,6 @@ namespace LibCECTray.ui
     delegate void UpdateLogCallback();
     private void UpdateLog()
     {
-      if (SuppressLogUpdates)
-        return;
-
       if (tbLog.InvokeRequired)
       {
         UpdateLogCallback d = UpdateLog;
@@ -572,7 +557,6 @@ namespace LibCECTray.ui
     #endregion
 
     #region Class members
-    private bool SuppressLogUpdates = false;
     private ConfigTab _selectedTab = ConfigTab.Configuration;
     private string _log = string.Empty;
     private CECController _controller;
@@ -599,4 +583,32 @@ namespace LibCECTray.ui
       Controller.DisplayDialog(appConfig, false);
     }
   }
+
+  /// <summary>
+  /// The tab pages in this application
+  /// </summary>
+  internal enum ConfigTab
+  {
+    Configuration,
+    KeyConfiguration,
+    Tester,
+    Log,
+    WMC,
+    XBMC
+  }
+
+  class AsyncDisconnect
+  {
+    public AsyncDisconnect(CECController controller)
+    {
+      _controller = controller;
+    }
+
+    public void Process()
+    {
+      _controller.Close();
+    }
+
+    private CECController _controller;
+  }
 }