public static void Show(Notification notification)
 {
     if (_currentNotification != null && _currentNotification.Priority != -1 && _currentNotification.Priority >= notification.Priority)
         _backlog.Enqueue(notification);
     else
         ShowNotification(notification);
 }
        public static void Show(string title, string text, Action clicked = null, int priority = 0)
        {
            var notification = new Notification
            {
                Title = title,
                Text = text,
                Clicked = clicked,
                Priority = priority
            };

            Show(notification);
        }
        private static void ShowNotification(Notification notification)
        {
            _notifyIcon.Visible = false;
            Notification peeked;
            if (_backlog.TryPeek(out peeked) && peeked == notification)
                _backlog.TryDequeue(out peeked);

            _currentNotification = notification;

            _notifyIcon.Visible = true;
            _notifyIcon.BalloonTipTitle = notification.Title;
            _notifyIcon.BalloonTipText = notification.Text;
            _notifyIcon.ShowBalloonTip(500);
        }
        private static void OnBalloonClosed(object sender, EventArgs eventArgs)
        {
            _currentNotification = null;

            if (_backlog.IsEmpty)
                return;

            Notification notification;
            if (!_backlog.TryDequeue(out notification))
                return;

            ShowNotification(notification);
        }