2013-06-28 3 views
2

То, что я не могу найти, - это то, что в консольном приложении C# можно писать текст в каком-то слое поверх верхней части существующего окна и текста, например, индикатор выполнения или информацию.Наложение на оверлей окна консоли?

Я видел командлеты командной оболочки, которые делают это, чтобы отобразить индикатор выполнения, а затем, когда закончится индикатор выполнения, он исчезнет, ​​и все, что было внизу, видно. Бары, которые я видел, также остаются в положении, даже если дополнительный выход в консоль вызывает прокрутку окна.

У вас есть идеи?

Edit: Вот пример из PowerShell делает это с помощью Write-Progress

http://blogs.technet.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-76-18-metablogapi/8726.WES_2D00_1_2D00_29_2D00_11_2D00_2_5F00_2587E97F.jpg

+1

Я думаю, это делается путем очистки экрана каждый раз, когда бар обновление прогресса и вновь отображающим, но, может быть, есть другой путь. – Gray

+0

Вы можете сделать все, что хотите, с помощью 'Console.SetCursorPosition'. Часто, когда что-то кажется «сверху» чего-то еще, это просто означает, что программа хранит информацию в памяти, необходимую для воссоздания того, что она ранее перезаписывала. – Servy

ответ

4

Вполне возможно, что они используют Console Screen Buffers. То есть они сохраняют текущий буфер и создают новый для приложения. Когда приложение будет завершено, он вернет исходный экранный буфер.

Я написал статью об использовании буферов экрана консоли в .NET несколько лет назад. Проверьте http://www.devsource.com/article2/0,1895,2011496,00.asp

Полный источник доступно в http://www.mischel.com/pubs/consoledotnet/consoledotnet.zip

+0

Очень интересно, спасибо! Дайте это прочитать, но похоже, что он будет делать то, что я просил, спасибо :) – Ashigore