Пример #1
0
        private static void Variant_2_New()
        {
            const string digitsTemolate = "##";
            const int    digitsOffset   = 48;

            const int offsetLeft = 20;
            const int offsetTop  = 20;

            var timeString =
                $"Минское время {digitsTemolate}:{digitsTemolate}:{digitsTemolate}. Говорят и показывают все телестанции страны... "; //выводиая строка

            var buffer       = timeString.ToCharArray();
            var hoursIndex   = timeString.IndexOf(digitsTemolate);
            var munitsIndex  = timeString.IndexOf(digitsTemolate, hoursIndex + 1);
            var secondsIndex = timeString.IndexOf(digitsTemolate, munitsIndex + 1);

            //Выводим рамку
            CH.DrawRect(new Position(offsetLeft - 1, offsetTop - 1), new Size(LineSize, 1));

            CH.SetConsoleColor(ConsoleColor.DarkYellow); //Цвет текста

            var currentPosition = 0;

            while (true)
            {
                //'Обновляем' время в буфере, если оно изменилось
                var newTime = DateTime.Now;

                buffer[hoursIndex]     = newTime.Hour < 10 ? '0' : (char)(newTime.Hour / 10 + digitsOffset);
                buffer[hoursIndex + 1] = (char)(newTime.Hour % 10 + digitsOffset);

                buffer[munitsIndex]     = newTime.Minute < 10 ? '0' : (char)(newTime.Minute / 10 + digitsOffset);
                buffer[munitsIndex + 1] = (char)(newTime.Minute % 10 + digitsOffset);

                buffer[secondsIndex]     = newTime.Second < 10 ? '0' : (char)(newTime.Second / 10 + digitsOffset);
                buffer[secondsIndex + 1] = (char)(newTime.Second % 10 + digitsOffset);


                var charsToStringEnd = buffer.Length - currentPosition; // Находим остаток до конца буфера

                Console.SetCursorPosition(offsetLeft, offsetTop);       // прыгаем в начало бегущей стоки

                if (charsToStringEnd >= LineSize)                       //если хватает то виыводим так
                {
                    Console.Write(buffer, currentPosition, LineSize);
                }
                else // если нет, то добисываем с начала буфера
                {
                    Console.Write(buffer, currentPosition, charsToStringEnd);
                    Console.Write(buffer, 0, LineSize - charsToStringEnd);
                }

                Thread.Sleep(SleepInterval);                         //Поток спит
                currentPosition = ++currentPosition % buffer.Length; //Идём на следующий символ
            }
        }