diff --git a/NzbDrone/SysTray/SysTrayApp.cs b/NzbDrone/SysTray/SysTrayApp.cs index 5cffc649c..a748a635a 100644 --- a/NzbDrone/SysTray/SysTrayApp.cs +++ b/NzbDrone/SysTray/SysTrayApp.cs @@ -1,6 +1,8 @@ using System; +using System.ComponentModel; using System.Drawing; using System.Reflection; +using System.Threading; using System.Windows.Forms; using NzbDrone.Common; using NzbDrone.Common.EnvironmentInfo; @@ -30,6 +32,9 @@ namespace NzbDrone.SysTray public void Start() { + Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException); + Application.ApplicationExit += new EventHandler(OnApplicationExit); + _trayMenu.MenuItems.Add("Launch Browser", LaunchBrowser); _trayMenu.MenuItems.Add("-"); _trayMenu.MenuItems.Add("Exit", OnExit); @@ -44,6 +49,11 @@ namespace NzbDrone.SysTray Application.Run(this); } + protected override void OnClosing(CancelEventArgs e) + { + DisposeTrayIcon(); + } + protected override void OnClosed(EventArgs e) { Console.WriteLine("Closing"); @@ -77,5 +87,23 @@ namespace NzbDrone.SysTray { _processProvider.Start(_hostController.AppUrl); } + + private void OnApplicationExit(object sender, EventArgs e) + { + DisposeTrayIcon(); + } + + private void OnThreadException(object sender, EventArgs e) + { + DisposeTrayIcon(); + } + + private void DisposeTrayIcon() + { + _trayIcon.Visible = false; + _trayIcon.Icon = null; + _trayIcon.Visible = false; + _trayIcon.Dispose(); + } } } \ No newline at end of file