}
private void SystemConsoleLineRewriter() => Console.SetCursorPosition(0, LineToClear);
+
+ private static bool? _isSetCursorPositionSupported;
+ public bool IsRewriteConsoleLineSupported
+ {
+ get {
+ bool isSupported = _isSetCursorPositionSupported ?? EnsureInitialized();
+ return isSupported;
+
+ bool EnsureInitialized()
+ {
+ try {
+ var left = Console.CursorLeft;
+ var top = Console.CursorTop;
+ Console.SetCursorPosition(0, LineToClear);
+ Console.SetCursorPosition(left, top);
+ _isSetCursorPositionSupported = true;
+ } catch {
+ _isSetCursorPositionSupported = false;
+ }
+ return (bool)_isSetCursorPositionSupported;
+ }
+ }
+ }
}
internal class ReturnCode
{
rewriter = new LineRewriter { LineToClear = Console.CursorTop - 1 };
Console.CursorVisible = false;
+ if (!rewriter.IsRewriteConsoleLineSupported)
+ {
+ ConsoleWriteLine("Recording trace in progress. Press <Enter> or <Ctrl+C> to exit...");
+ }
}
Action printStatus = () =>
{
if (printStatusOverTime)
{
- rewriter?.RewriteConsoleLine();
- fileInfo.Refresh();
- ConsoleWriteLine($"[{stopwatch.Elapsed.ToString(@"dd\:hh\:mm\:ss")}]\tRecording trace {GetSize(fileInfo.Length)}");
- ConsoleWriteLine("Press <Enter> or <Ctrl+C> to exit...");
+ if (rewriter.IsRewriteConsoleLineSupported)
+ {
+ rewriter?.RewriteConsoleLine();
+ fileInfo.Refresh();
+ ConsoleWriteLine($"[{stopwatch.Elapsed.ToString(@"dd\:hh\:mm\:ss")}]\tRecording trace {GetSize(fileInfo.Length)}");
+ ConsoleWriteLine("Press <Enter> or <Ctrl+C> to exit...");
+ }
}
if (rundownRequested)