Console.SetCursorPosition sets the position of the cursor. Which actually means that you're telling the console to start writing from that exact position and forward. That logically shouldn't stop the scrolling with a do {} while();

Console.SetWindowPosition is more fit to do the job, but you need to be aware of a Console buffer size. Even if you make the buffer size equal to the max value and use the set window position function, it won't do the trick, the donkey will keep showing, but you can't scroll and it will feel like jumping, have a look with this code:

static void Main(string[] args) { Console.WriteLine(" ^__^"); Console.WriteLine(" (oo)_______"); Console.WriteLine(" (__) )\\"); Console.WriteLine(" ||---|| "); Console.SetBufferSize(1000, Int16.MaxValue-1); do { Console.WriteLine(" || ||"); Console.SetWindowPosition(0, 0); } while (true); }

So, what can you actually do to achieve your goal, or at least a part of it, set the buffer size to a maximum, write all your lines, then set the window position to the start, this way, you can scroll and keep scrolling until you hit the bottom, but I highly doubt that you could achieve your primary goal within a loop, but I could be wrong.

Check the code of the way to do it without an infinite loop:

static void Main(string[] args) { Console.WriteLine(" ^__^"); Console.WriteLine(" (oo)_______"); Console.WriteLine(" (__) )\\"); Console.WriteLine(" ||---|| "); Console.SetBufferSize(1000, Int16.MaxValue - 1); for (int i = 0; i < Int16.MaxValue-10; i++) { Console.WriteLine(" || ||"); } Console.SetWindowPosition(0, 0); Console.ReadLine(); }

I can't think of any other way to partially achieve your goal without user interaction and within a loop.