/// <summary>
 /// Метод для удаления первой буквы в очереди из неё
 /// (в случае, если нужная клавиша была верно нажата)
 /// </summary>
 public void DropFirstLetterFormStream()
 {
     // Блокируем доступ другим потокам - для того, чтобы не было параллельной работы с LettersStream
     lock (UpdatingStateLock) {
         LettersStream.Dequeue();
     }
 }
        /// <summary>
        /// Получить символ, в данный момент находящийся в окружности выбора букв (если такого нет - '\0')
        /// </summary>
        /// <returns>Символ, находящийся в окружности выбора букв. Если такой отсутствует, возвращается символ '\0'</returns>
        public char GetRoundedChar()
        {
            if (LettersStream.Count == 0)
            {
                return('\0');
            }
            Letter firstLetter = LettersStream.Peek();
            int    letterX     = (int)firstLetter.position.X + g_fontSize / 2; // получаем координату X серединки буквы

            if (letterX < g_circleRectLeftUpPoint.X + g_circleDiametr && letterX > g_circleRectLeftUpPoint.X)
            {
                return(firstLetter.letter);
            }
            else
            {
                return('\0');
            }
        }
        /// <summary>
        /// Добавление букв в поток букв
        /// </summary>
        /// <param name="letters">Символы добавляемых букв</param>
        /// <param name="interval">Коэффициент, задающий межбуквенный интервал в потоке (чем он меньше, тем меньше интервал)</param>
        public void AddLettersToStream(char[] letters, int interval)
        {
            int circleRadius = Height / 2;
            int intervalVal  = interval * circleRadius; // = радиус кольца на интервальный коэффициент
            int curLetterX   = Width;

            foreach (var c in letters)
            {
                char letter = char.ToUpper(c);
                // Добавляемая буква появляется на правой границе элемента управления
                float xPos  = curLetterX;
                float yPos  = (circleRadius + 15) - rand.Next(circleRadius - 10);
                Color color = KeyboardHelper.GetKeyColorForChar(letter);
                // Формируем новую букву и добавляем её
                Letter addingLetter = new Letter(letter, new PointF(xPos, yPos), color);
                LettersStream.Enqueue(addingLetter);
                curLetterX += intervalVal;
            }
        }
 /// <summary>
 /// Свдинуть отображаемые буквы влево
 /// </summary>
 /// <param name="pushValue">Величина сдвига (в пикселях). По умолчанию величина равна двум</param>
 private void PushQueueForward(int pushValue = 2)
 {
     // Если отображаемых букв нет - двигать нечего, выходим
     if (!LetterStreamIsEmpty)
     {
         // Обходим очередь и уменьшаем координату X каждой вершины на величину сдвига
         foreach (var letter in LettersStream)
         {
             letter.position.X -= pushValue;
         }
         // Если первая буква ушла за линию - она исчезает
         if (LettersStream.Peek().position.X <= 0)
         {
             LettersStream.Dequeue();
             // Оповещаем о том, что одна буква ушла из очереди, т.к. была пропущена
             LetterMissedEvt?.Invoke();
         }
     }
 }