/// <summary>
        /// Prompts user to exit and exits cleanly if they choose yes
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnClose(object sender, CancelEventArgs e)
        {
            if (
                MessageBox.Show(this, "Are you sure?", Utils.ProductName, MessageBoxButton.YesNo,
                                MessageBoxImage.Question) == MessageBoxResult.Yes)
            {
                TabControl.ForceExit = true;

                var canExit = TabControl.CanUnload(TabControl.SelectedContent as ContentControl);

                if (!canExit)
                {
                    // NOTE: Invoked function is responsible for displaying message on why it can't exit
                    e.Cancel             = true;
                    TabControl.ForceExit = false;
                }
            }
            else
            {
                e.Cancel = true;
            }

            if (!e.Cancel)
            {
                Watcher.Stop();
                GarbageCollectAndFinalize();
            }
        }