Fix: Emby notification icon remained visible after shutdown

Also implemented the recommended pattern for IDisposable.
pull/702/head
softworkz 8 years ago
parent 74f511b2ee
commit f7c3ee1c68

@ -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();

@ -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();
}
}
}
}

Loading…
Cancel
Save