private void ForceRender() { var defaultColor = VTColorUtils.MapColorToEscapeSequence(_console.ForegroundColor, isBackground: false) + VTColorUtils.MapColorToEscapeSequence(_console.BackgroundColor, isBackground: true); // Geneate a sequence of logical lines with escape sequences for coloring. int logicalLineCount = GenerateRender(defaultColor); // Now write that out (and remember what we did so we can clear previous renders // and minimize writing more than necessary on the next render.) var renderLines = new RenderedLineData[logicalLineCount]; var renderData = new RenderData { lines = renderLines }; for (var i = 0; i < logicalLineCount; i++) { var line = _consoleBufferLines[i].ToString(); renderLines[i].line = line; renderLines[i].columns = LengthInBufferCells(line); } // And then do the real work of writing to the screen. // Rendering data is in reused ReallyRender(renderData, defaultColor); // Cleanup some excess buffers, saving a few because we know we'll use them. var bufferCount = _consoleBufferLines.Count; var excessBuffers = bufferCount - renderLines.Length; if (excessBuffers > 5) { _consoleBufferLines.RemoveRange(renderLines.Length, excessBuffers); } }