Ver Fonte

Fix: Emby notification icon remained visible after shutdown

Also implemented the recommended pattern for IDisposable.
softworkz há 9 anos atrás
pai
commit
f7c3ee1c68

+ 6 - 0
MediaBrowser.ServerApplication/MainStartup.cs

@@ -619,6 +619,12 @@ namespace MediaBrowser.ServerApplication
 
         private static void ShutdownWindowsApplication()
         {
+            if (_serverNotifyIcon != null)
+            {
+                _serverNotifyIcon.Dispose();
+                _serverNotifyIcon = null;
+            }
+
             //_logger.Info("Calling Application.Exit");
             //Application.Exit();
 

+ 18 - 47
MediaBrowser.ServerApplication/ServerNotifyIcon.cs

@@ -4,14 +4,13 @@ using MediaBrowser.Controller.Localization;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Server.Startup.Common.Browser;
 using System;
+using System.ComponentModel;
 using System.Windows.Forms;
 
 namespace MediaBrowser.ServerApplication
 {
     public class ServerNotifyIcon : IDisposable
     {
-        bool IsDisposing = false;
-
         private NotifyIcon notifyIcon1;
         private ContextMenuStrip contextMenuStrip1;
         private ToolStripMenuItem cmdExit;
@@ -21,25 +20,13 @@ namespace MediaBrowser.ServerApplication
         private ToolStripMenuItem cmdRestart;
         private ToolStripSeparator toolStripSeparator1;
         private ToolStripMenuItem cmdCommunity;
+        private Container components;
 
         private readonly ILogger _logger;
         private readonly IServerApplicationHost _appHost;
         private readonly IServerConfigurationManager _configurationManager;
         private readonly ILocalizationManager _localization;
 
-        public bool Visible
-        {
-            get
-            {
-                return notifyIcon1.Visible;
-            }
-            set
-            {
-                Action act = () => notifyIcon1.Visible = false;
-                Invoke(act);
-            }
-        }
-
         public void Invoke(Action action)
         {
             contextMenuStrip1.Invoke(action);
@@ -55,7 +42,7 @@ namespace MediaBrowser.ServerApplication
             _appHost = appHost;
             _configurationManager = configurationManager;
 
-            var components = new System.ComponentModel.Container();
+            components = new System.ComponentModel.Container();
 
             var resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
             contextMenuStrip1 = new ContextMenuStrip(components);
@@ -138,32 +125,6 @@ namespace MediaBrowser.ServerApplication
             LocalizeText();
 
             notifyIcon1.DoubleClick += notifyIcon1_DoubleClick;
-            Application.ThreadExit += Application_ThreadExit;
-            Application.ApplicationExit += Application_ApplicationExit;
-        }
-
-        void Application_ThreadExit(object sender, EventArgs e)
-        {
-            try
-            {
-                notifyIcon1.Visible = false;
-            }
-            catch
-            {
-
-            }
-        }
-
-        void Application_ApplicationExit(object sender, EventArgs e)
-        {
-            try
-            {
-                notifyIcon1.Visible = false;
-            }
-            catch
-            {
-
-            }
         }
 
         void notifyIcon1_DoubleClick(object sender, EventArgs e)
@@ -222,16 +183,26 @@ namespace MediaBrowser.ServerApplication
             _appHost.Shutdown();
         }
 
-        ~ServerNotifyIcon()
+        public void Dispose()
         {
-            Dispose();
+            Dispose(true);
         }
 
-        public void Dispose()
+        protected virtual void Dispose(bool disposing)
         {
-            if (!IsDisposing)
+            if (disposing)
             {
-                IsDisposing = true;
+                if (notifyIcon1 != null)
+                {
+                    notifyIcon1.Visible = false;
+                    notifyIcon1.Dispose();
+                    notifyIcon1 = null;
+                }
+
+                if (components != null)
+                {
+                    components.Dispose();
+                }
             }
         }
     }