Hola:
Independientemente de la cantidad de █ haya para crear una barra de progreso, no llega al 100 %.
(https://www.subeimagenes.com/img/captura-2004970.PNG)
Este es su código que he hecho hasta ahora.
using System;
using System.Threading;
namespace Porcentaje_barra_consola_01_cs
{
    class Program
    {
        public static int resultado = 0;
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Simulaor barra";
            // Tamaño ventana consola.
            Console.WindowWidth = 60; // X ancho.
            Console.WindowHeight = 20; // Y altura.
            // Cursor invisible.
            Console.CursorVisible = false;
            // Variables.
            int barra = 49;
            int porcentaje = 0;
            Console.SetCursorPosition(17, 1);
            Console.Write("    ");
            Console.SetCursorPosition(17, 1);
            Console.Write("");
            // Dibujamos la barra del portentaje.
            Console.SetCursorPosition(0, 3);
            Console.Write("0 %                         50 %                       100 %");
            Console.SetCursorPosition(0, 4);
            Console.Write("┌────────────────────────────┬───────────────────────────┐");
            Console.SetCursorPosition(0, 5);
            Console.ForegroundColor = ConsoleColor.Yellow;
            // Barra de progreso.
            for (int i = 0; i <= barra; i++)
            {
                Console.Write("█"); // Muestra ASCII 219 Dec y DB en Hex.
                                    // Console.Write((char)219);
                                    // Console.Write(Encoding.ASCII.GetBytes((char)219));
                porcentaje++; // Incrementa valor.
                printCargando(porcentaje);
                Thread.Sleep(100); // 100 ms o 0.1 segundos.
            }
            Console.ReadKey();
        }
        static void printCargando(int porcentaje)
        {
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.SetCursorPosition(0, 1);
            // Por dos para que simule el 100%.
            Console.Write("Cargado: " + (porcentaje).ToString() + " %");
            //Console.Write("Cargado: {0} %", (porcentaje * 2).ToString());
            //Console.Write($"Cargado: { (porcentaje * 2).ToString() } %");
            // Reestablecemos para que vuelva a imprimir bajo la línea de carga.
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.SetCursorPosition(porcentaje, 5);
        }
    }
}
Gracias. ;)
			
			
			
				Cita de: Meta en 27 Febrero 2019, 22:29 PM
Independientemente de la cantidad de █ haya para crear una barra de progreso, no llega al 100 %.
Citarint barra = 49;
Citarfor (int i = 0; i <= barra; i++) { ... }
La longitud de caracteres de esa "barra de progreso" son 58, no 49...
Citarporcentaje++; // Incrementa valor.
En ninguna parte del código estás calculando un porcentaje, tan solo incrementas un valor. Logicamente tal y como tienes ahora mismo ese código, la única manera de que ese "porcentaje" llegue a 100 sería incrementar el valor 100 veces. 
Supongo que no necesitarás que te explique la fórmula para calcular un porcentaje...
int barra = 58;
double porcentaje = 0;
for (int i = 0; i < barra; i++) {
	porcentaje = ((i + 1.0D) / (barra / 100.0));
}Y el método ese "printCargando" sencillamente está mal planteado al tomar un valor de porcentaje como parámetro y usarlo tal cual en el método 
Console.SetCursorPosition()... no tiene sentido.
Saludos.
			
 
			
			
				La forma más coherente (a cambio de posiblemente, algunas líneas más de código), es encapuslar lo mínimo de una barras de progreso (que uses una clase o lo dejes ahí suelto, ya es cosa tuya):
Campos:
- Mínimo
- Maximo
- Valor
Metodos:
- Inicializar(min, cantidad, valor, [fila, columna])
- Incrementar(+x) //con alguna sobrecarga
- Dibujar(dibcosasprevias)   // Actualizar el 'gráfico'.
Y tratándose de consola, convendría además mantener la fila donde dibujar y la columna inicial de dibujado, ambos valores pueden ser pasados al inicializar...
NOTA: que no se acomete comprobaciones, si lo vas a usar tú es obvio que no pondrás valor fuera de límites.
funcion Inicializar(0,100,0, fila=5, columna=12)
   p_Min = min
   p_Max = p_min + (Cantidad-1)  //nótese que cantidad puede ser negativo, y consecuentemente max serlo también, si no se desea designar tipos sin signo).
   p_Valor = valor
   p_Fila = Fila
   p_Columna = columna
   Dibujar(true)
fin funcion
propiedad Set Valor(x)  // propiedad Get Valor ... probablemente solo precises que sea de escritura.
    Si (x <> p_Valor)
       p_valor = x
       dibujar(false)
    fin si
fin propiedad
funcion Incrementar(x)
    p_valor +=x
    dibujar(false)
fin funcion
funcion Incrementar
    Incrementar(1)
fin funcion
funcion Dibujar(previo)
    si previo
        dibujar infoprevia //texto, etc... se supone que basado en p_fila -algo
    fin si
    establecer posicioncursor(p_fila, p_columna)
    bucle desde p_min a p_valor
        dibujar char(219)  
    siguiente
fin funcion
Luego simplemente inicializas con los valores oportunos... y ya se dibuja.
Cuando hagas alguna tarea de carga usarías valor = x o incrementar o incrementar(x) como remplazo de tu 'printCargando'. Usar uno u otro depende de lo que se haga, en el bucle posiblemente 'incrementar' vaya bien, pero si hay algna tarea anterior o posterior pudiera darse un incremntar(10) (por ejemplo), o si hay varias tareas, volver a ponerlo a 0 Valor = 0, incluso un nuevo Inicializar(,,,) si los límites son diferentes...
La gran ventaja de hacerlo más estructurado (que solo líneas espagueti sin fin) es que con posterioridad cualquier cambio, es más sencillo de llevar a cabo y si pasa demasiado tiempo, un simple vistazo sobra para entender lo que hacía y saber donde tocar si se quiere hacer algún cambio, sin perder tiempo en empaparse con lo escrito tiempo/años atrás. Por ejemplo, alojado en una clase, podrías reutilizarlo en distintos proyectos, con tan solo cambiar lo que se dibuje como 'info previa', (los textos que se asocien a lo que se haga, como 'leyendo fichero...', 'buscando...', ordenando...', etc... que si además lo parametrizas, pués mejor que mejor).
			
			
			
				Si es que...
Aquí publicaste un tema relacionado en el año 2016:
- Tema: Añadir porcentaje al progressBar   (https://foro.elhacker.net/net/anadir_porcentaje_al_progressbar-t448866.0.html;msg2060128#msg2060128)
Y aquí otro en el 2017:
- Tema: Calcular porcentaje (https://foro.elhacker.net/buscador-t473663.0.html)
...
A ver, yo soy el primero en reconocer que soy malísimo con las matemáticas, pero si te han estado explicando como calcular un porcentaje durante años y todavía sigues preguntando lo mismo y no te da para repasar las respuestas que te ofrecieron a esos temas que creaste en el foro, pues yo ya no se que nombre tiene eso...
Muchas veces pienso que estas dudas son un trolleo y que es una pérdida de tiempo escribir respuestas largas en tus temas precisamente por eso... y por que el tiempo y los años demuestra que no lees lo que te dicen, por que sigues preguntando exactamente lo mismo que hace 3 años (en este y otros temas distintos, siempre ocurre lo mismo contigo).
Vamos a ver... hace unos años desarrollé esta barra de progreso reutilizable para aplicaciones de consola...
(https://i.imgur.com/dwBUI42.gif)
partiendo de esta idea en C# que tomé como base e inspiración:
- https://gist.github.com/DanielSWolf/0ab6a96899cc5377bf54
El código (el cual no está muy optimizado, todo hay que decirlo) lo puedes pegar en un nuevo proyecto de VB.NET para generar un archivo dll, o lo puedes convertir a C# si prefieres. O también puedes usar el código original en C#, aunque no es tan personalizable como este de aquí abajo.
Si despues de esto sigues teniendo dudas y necesitas ayuda con la utilización de barras de progreso y cálculo de porcentajes, yo me daré por vencido para siempre...
' ***********************************************************************
' Author   : ElektroStudios
' Modified : 12-December-2016
' ***********************************************************************
#Region " Imports "
Imports System.Drawing
Imports System.Text
Imports System.Threading
' Imports DevCase.Core.Application.UserInterface.Tools.Console
' Imports DevCase.Core.Design
#End Region
#Region " Console ProgressBar "
'Namespace DevCase.Core.Application.UserInterface
'#If Not NET40 Then
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' A personalizable colorful ASCII progress bar for console applications.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <remarks>
''' Based on: <see href="https://gist.github.com/DanielSWolf/0ab6a96899cc5377bf54"/>
''' </remarks>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Public Module Module1
''' 
'''     Public Sub Main()
'''         Console.CursorVisible = False
'''         Console.Write("Performing some task... ")
''' 
'''         Using progress As New ConsoleProgressBar(blockCount:=20) With {
'''             .Animation = "||//--\\".ToCharArray(),
'''             .AnimationSpeed = TimeSpan.FromMilliseconds(125),
'''             .AnimationBackColor = Console.BackgroundColor,
'''             .AnimationForeColor = ConsoleColor.Yellow,
'''             .BlockActiveChar = "█"c,
'''             .BlockInactiveChar = "·"c,
'''             .BlockActiveBackColor = Console.BackgroundColor,
'''             .BlockActiveForeColor = ConsoleColor.Green,
'''             .BlockInactiveBackColor = Console.BackgroundColor,
'''             .BlockInactiveForeColor = ConsoleColor.DarkGray,
'''             .BorderBackColor = Console.BackgroundColor,
'''             .BorderForeColor = ConsoleColor.White,
'''             .ProgressTextFormat = "{1} of {2} ({0}%)",
'''             .ProgressTextBackColor = Console.BackgroundColor,
'''             .ProgressTextForeColor = ConsoleColor.Gray
'''         }
''' 
'''             For i As Integer = 0 To 100
'''                 progress.Report(i / 100)
'''                 Thread.Sleep(100)
'''             Next i
'''         End Using
''' 
'''         Console.WriteLine()
'''         Console.WriteLine("Done.")
'''         Console.ReadKey()
'''     End Sub
''' 
''' End Module
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
Public NotInheritable Class ConsoleProgressBar : Implements IDisposable : Implements IProgress(Of Double)
#Region " Properties "
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets the current progress value. From 0.0 to 1.0
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The current progress value. From 0.0 to 1.0
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public ReadOnly Property CurrentProgress As Double
            Get
                Return Me.currentProgressB
            End Get
        End Property
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' The current progress value. From 0.0 to 1.0
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private currentProgressB As Double
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets the amount of blocks to display in the progress bar.
        ''' <para></para>
        ''' Default value is: 20
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The amount of blocks to display in the progress bar.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public ReadOnly Property BlockCount As Integer
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets the character used to draw an active progress bar block.
        ''' <para></para>
        ''' Default value is: "#"
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The character used to draw an active progress bar block.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BlockActiveChar As Char
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets the character used to draw an inactive progress bar block.
        ''' <para></para>
        ''' Default value is: "·"
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The character used to draw an inactive progress bar block.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BlockInactiveChar As Char
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the background of an active progress bar block.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the background of an active progress bar block.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BlockActiveBackColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the foreground of an active progress bar block.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the foreground of an active progress bar block.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BlockActiveForeColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the background of a inactive progress bar block.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the background of a inactive progress bar block.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BlockInactiveBackColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the foreground of a inactive progress bar block.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the foreground of a inactive progress bar block.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BlockInactiveForeColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the background of the borders of the progress bar.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the background of the borders of the progress bar.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BorderBackColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the foreground of the borders of the progress bar.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the foreground of the borders of the progress bar.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property BorderForeColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the format of the progress text, where:
        ''' <para></para> {0} = Percentage Value
        ''' <para></para> {1} = Current Value
        ''' <para></para> {2} = Maximum Value
        ''' <para></para>
        ''' Default value is: "{0}%"
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The format of the percentage string.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property ProgressTextFormat As String
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the background of the progress text.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the background of the borders of the progress text.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property ProgressTextBackColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the foreground of the borders of the progress text.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the foreground of the borders of the progress text.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property ProgressTextForeColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the characters used to draw the animation secuence at the very end of the progress bar.
        ''' <para></para>
        ''' Default value is: {"|"c, "|"c, "/"c, "/"c, "-"c, "-"c, "\"c, "\"c}  ( that is: "||//--\\" )
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The characters used to draw the animation secuence at the very end of the progress bar.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property Animation As Char()
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the speed (framerate) of the animation secuence defined in <see cref="ConsoleProgressBar.Animation"/>.
        ''' <para></para>
        ''' Default value is: 125 milliseconds.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The speed (framerate) of the animation secuence defined in <see cref="ConsoleProgressBar.Animation"/>.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property AnimationSpeed As TimeSpan
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the background of the animation secuence.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the background of the borders of the animation secuence.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property AnimationBackColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets the <see cref="ConsoleColor"/> used to paint the foreground of the borders of the animation secuence.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' The <see cref="ConsoleColor"/> used to paint the foreground of the borders of the animation secuence.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property AnimationForeColor As ConsoleColor
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Gets or sets a value indicating whether the animation secuence is visible in the progress bar.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <value>
        ''' A value indicating whether the animation secuence is visible in the progress bar.
        ''' </value>
        ''' ----------------------------------------------------------------------------------------------------
        Public Property AnimationVisible As Boolean
#End Region
#Region " Private Fields "
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' The timer.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private ReadOnly timer As Threading.Timer
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' The current animation index.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private animationIndex As Integer
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' The cursor position in the console buffer when instancing the <see cref="ConsoleProgressBar"/> class.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private cursorPos As Point
#End Region
#Region " Constructors "
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Prevents a default instance of the <see cref="ConsoleProgressBar"/> class from being created.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private Sub New()
        End Sub
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Initializes a new instance of the <see cref="ConsoleProgressBar"/> class.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <param name="blockCount">
        ''' The amount of blocks to display in the progress bar. Default value is: 20
        ''' </param>
        ''' ----------------------------------------------------------------------------------------------------
        Public Sub New(Optional ByVal blockCount As Integer = 10)
            If (blockCount < 2) Then
                Throw New ArgumentException(message:="Block count must be a value greater than 1.", paramName:=NameOf(blockCount))
            End If
            Me.BlockCount = blockCount
            Me.BlockActiveChar = "#"c
            Me.BlockInactiveChar = "·"c
            Me.BlockActiveBackColor = Console.BackgroundColor
            Me.BlockActiveForeColor = Console.ForegroundColor
            Me.BlockInactiveBackColor = Console.BackgroundColor
            Me.BlockInactiveForeColor = Console.ForegroundColor
            Me.BorderBackColor = Console.BackgroundColor
            Me.BorderForeColor = Console.ForegroundColor
            Me.Animation = "||//--\\".ToCharArray()
            Me.AnimationSpeed = TimeSpan.FromMilliseconds(100)
            Me.AnimationVisible = True
            Me.AnimationBackColor = Console.BackgroundColor
            Me.AnimationForeColor = Console.ForegroundColor
            Me.ProgressTextFormat = "{0}%"
            Me.ProgressTextBackColor = Console.BackgroundColor
            Me.ProgressTextForeColor = Console.ForegroundColor
            Me.timer = New Timer(AddressOf Me.TimerCallback)
            Me.cursorPos = New Point(Console.CursorLeft, Console.CursorTop)
            ' A progress bar is only for temporary display in a console window.
            ' If the console output is redirected to a text file, draw nothing.
            ' Otherwise, we will end up with a lot of garbage in the target text file.
            If Not Console.IsOutputRedirected Then
                Me.ResetTimer()
            End If
        End Sub
#End Region
#Region " Public Methods "
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Reports a progress update.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <param name="value">
        ''' The value of the updated progress.
        ''' </param>
        ''' ----------------------------------------------------------------------------------------------------
        Public Sub Report(ByVal value As Double) Implements IProgress(Of Double).Report
            ' Make sure value is in [0..1] range
            value = Math.Max(0, Math.Min(1, value))
            Interlocked.Exchange(Me.currentProgressB, value)
        End Sub
#End Region
#Region " Private Methods "
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Handles the calls from <see cref="ConsoleProgressBar.timer"/>.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <param name="state">
        ''' An object containing application-specific information relevant to the 
        ''' method invoked by this delegate, or <see langword="Nothing"/>.
        ''' </param>
        ''' ----------------------------------------------------------------------------------------------------
        Private Sub TimerCallback(ByVal state As Object)
            SyncLock Me.timer
                If (Me.isDisposed) Then
                    Exit Sub
                End If
                Me.UpdateText()
                Me.ResetTimer()
            End SyncLock
        End Sub
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Resets the timer.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private Sub ResetTimer()
            Me.timer.Change(Me.AnimationSpeed, TimeSpan.FromMilliseconds(-1))
        End Sub
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Updates the progress bar text.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private Sub UpdateText()
            Dim currentBlockCount As Integer = CInt(Me.currentProgressB * Me.BlockCount)
            Dim percent As Integer = CInt(Me.currentProgressB * 100)
            Dim text As String =
                    String.Format("[{0}{1}] {2} {3}",
                                  New String(Me.BlockActiveChar, currentBlockCount),
                                  New String(Me.BlockInactiveChar, Me.BlockCount - currentBlockCount),
                                  String.Format(Me.ProgressTextFormat, percent, (Me.currentProgressB * 100), 100),
                                  Me.Animation(Math.Max(Interlocked.Increment(Me.animationIndex), Me.animationIndex - 1) Mod Me.Animation.Length))
            Dim textLen As Integer = text.Length
            Dim coloredText As New StringBuilder()
            With coloredText
                .AppendFormat("*B{0}**F{1}*{2}*-B**-F*", CInt(Me.BorderBackColor), CInt(Me.BorderForeColor),
                                  "[")
                .AppendFormat("*B{0}**F{1}*{2}*-B**-F*", CInt(Me.BlockActiveBackColor), CInt(Me.BlockActiveForeColor),
                                  New String(Me.BlockActiveChar, currentBlockCount))
                .AppendFormat("*B{0}**F{1}*{2}*-B**-F*", CInt(Me.BlockInactiveBackColor), CInt(Me.BlockInactiveForeColor),
                                  New String(Me.BlockInactiveChar, Me.BlockCount - currentBlockCount))
                .AppendFormat("*B{0}**F{1}*{2}*-B**-F*", CInt(Me.BorderBackColor), CInt(Me.BorderForeColor),
                                  "]")
                .Append(" ")
                .AppendFormat("*B{0}**F{1}*{2}*-B**-F*", CInt(Me.ProgressTextBackColor), CInt(Me.ProgressTextForeColor),
                                  String.Format(Me.ProgressTextFormat, percent, (Me.currentProgressB * 100), 100))
                .Append(" ")
                If Me.AnimationVisible Then
                    .AppendFormat("*B{0}**F{1}*{2}*-B**-F*", CInt(Me.AnimationBackColor), CInt(Me.AnimationForeColor),
                                      Me.Animation(Math.Max(Interlocked.Increment(Me.animationIndex), Me.animationIndex - 1) Mod Me.Animation.Length))
                End If
            End With
            ' Lazy error handling when the console window is resized by the end-user.
            Try
                If (Console.BufferWidth > textLen) Then
                    coloredText.Append(" "c, Console.BufferWidth - text.Length)
                End If
                Console.SetCursorPosition(Me.cursorPos.X, Me.cursorPos.Y)
                ConsoleUtil.WriteColorText(coloredText.ToString(), {"*"c})
            Catch ex As Exception
                ' Do nothing.
            End Try
        End Sub
#End Region
#Region " IDisposable Implementation "
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Flag to detect redundant calls when disposing.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        Private isDisposed As Boolean = False
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Releases all the resources used by this instance.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        <DebuggerStepThrough>
        Public Sub Dispose() Implements IDisposable.Dispose
            Me.Dispose(isDisposing:=True)
        End Sub
        ''' ----------------------------------------------------------------------------------------------------
        ''' <summary>
        ''' Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        ''' Releases unmanaged and, optionally, managed resources.
        ''' </summary>
        ''' ----------------------------------------------------------------------------------------------------
        ''' <param name="isDisposing">
        ''' <see langword="True"/>  to release both managed and unmanaged resources; 
        ''' <see langword="False"/> to release only unmanaged resources.
        ''' </param>
        ''' ----------------------------------------------------------------------------------------------------
        <DebuggerStepThrough>
        Protected Sub Dispose(ByVal isDisposing As Boolean)
            If (Not Me.isDisposed) AndAlso (isDisposing) Then
                SyncLock Me.timer
                    Me.UpdateText()
                End SyncLock
                If (Me.timer IsNot Nothing) Then
                    Me.timer.Dispose()
                End If
            End If
            Me.isDisposed = True
        End Sub
#End Region
    End Class
'#End If
'End Namespace
#End Region
'Namespace DevCase.Core.Application.UserInterface.Tools.Console
Public NotInheritable Class ConsoleUtil
#Region " Public Methods "
    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Writes colored text to the console.
    ''' <para></para>
    ''' Use <c>*F##*</c> as the start delimiter of the ForeColor, use <c>*-F*</c> as the end delimiter of the ForeColor.
    ''' <para></para>
    ''' Use <c>*B##*</c> as the start delimiter of the BackColor, use <c>*-B*</c> as the end delimiter of the BackColor.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <example> This is a code example.
    ''' <code>
    ''' WriteColorText("*F10*Hello *F14*World!*-F*", {"*"c})
    ''' </code>
    ''' </example>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="text">
    ''' The color-delimited text to write.
    ''' </param>
    ''' 
    ''' <param name="delimiters">
    ''' A set of 1 or 2 delimiters to parse the color-delimited string.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerStepThrough>
    Public Shared Sub WriteColorText(ByVal text As String,
                                         ByVal delimiters As Char())
        ' Save the current console colors to later restore them.
        Dim oldForedColor As ConsoleColor = Console.ForegroundColor
        Dim oldBackColor As ConsoleColor = Console.BackgroundColor
        ' Split the string to retrieve and parse the color-delimited strings.
        Dim stringParts As String() =
                    text.Split(delimiters, StringSplitOptions.RemoveEmptyEntries)
        ' Parse the string parts.
        For Each part As String In stringParts
            If (part.ToUpper Like "F#") OrElse (part.ToUpper Like "F##") Then
                ' Use the new ForeColor.
                Console.ForegroundColor = DirectCast(CInt(part.Substring(1)), ConsoleColor)
            ElseIf (part.ToUpper Like "B#") OrElse (part.ToUpper Like "B##") Then
                ' Use the new BackgroundColor.
                Console.BackgroundColor = DirectCast(CInt(part.Substring(1)), ConsoleColor)
            ElseIf (part.ToUpper Like "-F") Then
                ' Use the saved Forecolor.
                Console.ForegroundColor = oldForedColor
            ElseIf (part.ToUpper Like "-B") Then
                ' Use the saved BackgroundColor.
                Console.BackgroundColor = oldBackColor
            Else ' String part is not a delimiter so we can print it.
                Console.Write(part)
            End If
        Next part
        ' Restore the saved console colors.
        Console.ForegroundColor = oldForedColor
        Console.BackgroundColor = oldBackColor
    End Sub
#End Region
    Private Sub New()
    End Sub
End Class
'End NamespaceModo de empleo:
Public Module Module1
    Public Sub Main()
        Console.CursorVisible = False
        Console.Write("Performing some task... ")
        Using progress As New ConsoleProgressBar(blockCount:=20) With {
            .Animation = "||//--\\".ToCharArray(),
            .AnimationSpeed = TimeSpan.FromMilliseconds(125),
            .AnimationBackColor = Console.BackgroundColor,
            .AnimationForeColor = ConsoleColor.Yellow,
            .BlockActiveChar = "█"c,
            .BlockInactiveChar = "·"c,
            .BlockActiveBackColor = Console.BackgroundColor,
            .BlockActiveForeColor = ConsoleColor.Green,
            .BlockInactiveBackColor = Console.BackgroundColor,
            .BlockInactiveForeColor = ConsoleColor.DarkGray,
            .BorderBackColor = Console.BackgroundColor,
            .BorderForeColor = ConsoleColor.White,
            .ProgressTextFormat = "{1} of {2} ({0}%)",
            .ProgressTextBackColor = Console.BackgroundColor,
            .ProgressTextForeColor = ConsoleColor.Gray
        }
            For i As Integer = 0 To 100
                progress.Report(i / 100)
                Thread.Sleep(100)
            Next i
        End Using
        Console.WriteLine()
        Console.WriteLine("Done.")
        Console.ReadKey()
    End Sub
End ModulePor cierto, ese código lo comparto de manera libre aunque lo cierto es que forma parte del código fuente del framework comercial 
DevCase for .NET Framework (https://codecanyon.net/item/elektrokit-class-library-for-net/19260282) para desarrolladores .NET.
Saludos...
			
				Buenas gente.
He hecho esto gracia a ustedes y no me dibuja la línea.
using System;
using System.Threading;
namespace Barra_progreso_consola_01_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Simulaor barra";
            // Tamaño ventana consola.
            Console.WindowWidth = 60; // X ancho.
            Console.WindowHeight = 20; // Y altura.
            // Cursor invisible.
            Console.CursorVisible = false;
            // Variables.
            int barra = 58;
            double porcentaje = 0;
            Console.SetCursorPosition(17, 1);
            Console.Write("    ");
            Console.SetCursorPosition(17, 1);
            Console.Write("");
            // Dibujamos la barra del portentaje.
            Console.SetCursorPosition(0, 3);
            Console.Write("0 %                         50 %                       100 %");
            Console.SetCursorPosition(0, 4);
            Console.Write("┌────────────────────────────┬───────────────────────────┐");
            //Console.SetCursorPosition(0, 5);
            //Console.ForegroundColor = ConsoleColor.Yellow;
            // Barra de progreso.
            for (int i = 0; i <= barra; i++)
            {
                porcentaje = ((i + 1.0D) / (barra / 100.0));
                Console.Write("█"); // Muestra ASCII 219 Dec y DB en Hex.
                                    // Console.Write((char)219);
                                    // Console.Write(Encoding.ASCII.GetBytes((char)219));
                porcentaje++; // Incrementa valor.
                printCargando(porcentaje);
                Thread.Sleep(20); // 100 ms o 0.1 segundos.
            }
            Console.ReadKey();
        }
        static void printCargando(double porcentaje)
        {
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.SetCursorPosition(0, 1);
            // Por dos para que simule el 100%.
            Console.Write("Cargado: " + (porcentaje).ToString("N2") + " %");
            //Console.Write("Cargado: {0} %", (porcentaje).ToString("N2"));
            //Console.Write($"Cargado: { (porcentaje).ToString() } %");
            // Reestablecemos para que vuelva a imprimir bajo la línea de carga.
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.SetCursorPosition(0, 5);
        }
    }
}
Esto si que es una buena barra de progreso.
(https://i.imgur.com/dwBUI42.gif)
Buen trabajo, lo haré cuando pueda.
			
			
			
				Cita de: Meta en 28 Febrero 2019, 18:02 PM
...He hecho esto gracia a ustedes y no me dibuja la línea...
mmm.... Me hace gracia eso... 
Gracias a ¿nosotros?. Más bien gracias a tí...
Ya sé que no vas a adoptar la solución que te propone 
Elektro, porque son muchas líneas de código... pero la que yo te propuse no son muchas más que las que tu ya tienes... Y es que en realidad lleva solo 5 minutos, pasar mi pseudocódigo a código:
Eso sí, en Visual Basic, en C# y lenguajes similares, me aburre la cansina sintaxis de tanto punto y coma, de tanta llave y paréntesis, y la estúpida insistencia en ser sensible a la capitalización... I'm sorry, pero pasarlo a c# es casi casi idéntico...
Imports System.Threading
Module Module1
    Sub Main()
        Console.Title = "Simulador barra de progreso"
        Console.WindowWidth = 80   ' X ancho.
        Console.WindowHeight = 20  ' Y altura.
        Console.CursorVisible = False  
        Dim k As UInteger
        Dim p As Progreso = New Progreso(0, 58, 0, 5) ' por defecto columna 12
        For k = 0 To p.Maximo
            p.Incrementar()     ' incrementa y redibuja todo.
            Thread.Sleep(40)    ' 40 milisegundos.
        Next
        Console.ReadKey()
    End Sub
    Private Class Progreso
        Dim p_Min, p_Max As UInteger
        Dim p_Fila, p_Columna As UInteger
        Dim p_Valor, s_Avance, s_Porcen As Single
        Dim FullProgreso As String
        Sub New(ByVal Min As UInteger, ByVal Cantidad As UInteger, ByVal Value As UInteger, Optional ByVal Fila As UInteger = 5, Optional ByVal Columna As UInteger = 12)
            p_Min = Min
            p_Max = (p_Min + Cantidad - 1)
            p_Valor = Value
            s_Avance = (Cantidad / 100)
            s_Porcen = (100 / Cantidad)
            FullProgreso = Strings.StrDup(Integer.Parse(Cantidad), Chr(177)) ' 219
            p_Fila = Fila
            p_Columna = Columna
            Me.Dibujar(True)
        End Sub
        Public ReadOnly Property Maximo As UInteger
            Get
                Return p_Max
            End Get
        End Property
        Public Sub Incrementar()
            p_Valor += s_Avance
            Me.Dibujar(False)
        End Sub
        Private Sub Dibujar(ByVal Previo As Boolean)
            Console.ForegroundColor = ConsoleColor.Red
            If (Previo = True) Then          ' Dibujamos la barra del portentaje.               
                Console.SetCursorPosition(p_Columna, p_Fila - 2)
                Console.Write("0 %                         50 %                     100 %")
                Console.SetCursorPosition(p_Columna - 1, p_Fila - 1)
                Console.Write("{0}{1}{0}", Chr(179), Strings.StrDup(Convert.ToInt32(p_Max - p_Min + 1), Chr(205))) ' 205= 2 rayas horizontales 240=1raya horizontal. 179=carácter de puntos (no macizo)
            End If
            Console.SetCursorPosition(p_Columna, p_Fila - 4)
            Console.Write("Cargado: {0} {1}", (p_Valor * s_Porcen / s_Avance).ToString("N2"), " %") 
            Console.ForegroundColor = ConsoleColor.Yellow
            Console.SetCursorPosition(p_Columna, p_Fila)
            Console.Write(FullProgreso.Substring(0, (p_Valor / s_Avance)))
        End Sub
        ' No se usa en este ejemplo
        'Public WriteOnly Property Valor() As UInteger
        '    Set(ByVal value As UInteger)
        '        p_Valor = value
        '        Me.Dibujar(False)
        '    End Set
        'End Property
    End Class
End Module
P.d: Y aquí el aspecto de como se ve...
(https://i.imgur.com/k2tARt1.png)
			
 
			
			
				Buenas:
Intenté pasarlo con este enlace (http://converter.telerik.com/), pero me daba errores por todoas partes. 
Al final ya me sale.
(https://www.subeimagenes.com/img/captura-2005311.PNG)
using System;
using System.Threading;
namespace Barra_progreso_consola_03_cs
{
    class Program
    {
        // Variable.
        static double resultadoPorcentaje;
        static void Main(string[] args)
        {
            Console.Title = "Simulador barra de progreso";
            Console.WindowWidth = 60;   // X ancho.
            Console.WindowHeight = 10;  // Y altura.
            Console.CursorVisible = false;
            // Variable.
            int barra = 58;
            int porcentaje = 0;
            // Dibujamos la barra del portentaje.
            Console.SetCursorPosition(0, 3);
            Console.Write("0 %                         50 %                       100 %");
            Console.SetCursorPosition(0, 4);
            Console.Write("┌────────────────────────────┬───────────────────────────┐");
            Console.SetCursorPosition(0, 5);
            Console.Write("░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░"); // Ascii 176.
            Console.SetCursorPosition(0, 5);
            Console.ForegroundColor = ConsoleColor.Yellow;
            for (int i = 0; i < barra; i++)
            {
                resultadoPorcentaje = (i + 1.0D) / (barra / 100.0);
                Console.Write("█"); // Muestra ASCII 219 Dec y DB en Hex.
                                    // Console.Write((char)219);
                                    // Console.Write(Encoding.ASCII.GetBytes((char)219));
                porcentaje++; // Incrementa valor.
                PintarCargando(porcentaje);
                Thread.Sleep(100); // 100 ms o 0.1 segundos.
            }
            // Pulse cualquier tecla para salir.
            Console.ReadKey();
        }      
        static void PintarCargando(int porcentaje)
        {
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.SetCursorPosition(0, 1);
            Console.Write("Cargado: " + (resultadoPorcentaje).ToString("N0") + " %");// por dos para que simule el 100%
            // Reestablecemos para que vuelva a pintar bajo la línea de carga.
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.SetCursorPosition(porcentaje, 5);
        }
    }
}
Son menos códigos.
¿Algún programa para capturar imágenes a gif como he visto por aquí?
Muchas gracias a todos.
			
			
			
				Cita de: Meta en  1 Marzo 2019, 05:48 AM
¿Algún programa para capturar imágenes a gif como he visto por aquí?
El que yo uso: https://www.screentogif.com/
			
 
			
			
				Cita de: Meta en  1 Marzo 2019, 05:48 AM
Buenas:
...Intenté pasarlo con este enlace (http://converter.telerik.com/), pero me daba errores por todoas partes. 
...Son menos códigos....
Cuantas excusas...
He probado con esa página y la verdad que lo hace bastante bien...
Tan solo conviene cambiar los tipos de UInt a int y los float a double.
Luego solo restan 3 conversiones que tratan sobre cadenas... obtener una cadena que consiste de x caracteres, en c# es usar el constructor new string(char, cantidad) (en vb solemos usar strDup, que es el heredero de Strings(char, cantidad)...
Yo no he tardado más de 1 minuto en pasarlo a C# usando el código devuelto por esa página (me reitero, lo hace bastante bien):
Aquí exactamente el mismo código que puse en VB (bueno debajo del progreso he añadido otra línea).
using System;
using Microsoft.VisualBasic;
using System.Threading;
static class Module1
{
    public static void Main()
    {
        Console.Title = "Simulador barra de progreso";
        Console.WindowWidth = 80;   // X ancho.
        Console.WindowHeight = 20;  // Y altura.
        Console.CursorVisible = false;
        int k;
        Progreso p = new Progreso(0, 58, 0, 5); // por defecto columna 12
        for (k = 0; k <= p.Maximo; k++)
        {
            p.Incrementar();     // incrementa y redibuja todo.
            Thread.Sleep(40);    // 40 milisegundos.
        }
        Console.ReadKey();
    }
    private class Progreso
    {
        private int p_Min, p_Max;
        private int p_Fila, p_Columna;
        private double p_Valor, s_Avance, s_Porcen;
        private string FullProgreso;
        public Progreso(int Min, int Cantidad, int Value, int Fila = 5, int Columna = 12)
        {
            p_Min = Min;
            p_Max = (p_Min + Cantidad - 1);
            p_Valor = Value;
            s_Avance = (Cantidad / (double)100);
            s_Porcen = (100 / (double)Cantidad);
            FullProgreso = new string((char)177, Cantidad);
            p_Fila = Fila;
            p_Columna = Columna;
            this.Dibujar(true);
        }
        public int Maximo
        {
            get
            {
                return p_Max;
            }
        }
        public void Incrementar()
        {
            p_Valor += s_Avance;
            this.Dibujar(false);
        }
        private void Dibujar(bool Previo)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            if ((Previo == true))
            {
                Console.SetCursorPosition(p_Columna, p_Fila - 2);
                Console.Write("0 %                         50 %                     100 %");
                Console.SetCursorPosition(p_Columna - 1, p_Fila - 1);
                Console.Write("{0}{1}{0}", (char)179, new string((char)205,(p_Max - p_Min + 1))); // 205= 2 rayas horizontales 240=1raya horizontal. 179=carácter de puntos (no macizo)
                // dibujamos la misma línea por debajo de la barra de progreso.
                Console.SetCursorPosition(p_Columna - 1, p_Fila + 1);
                Console.Write("{0}{1}{0}", (char)179, new string((char)205, (p_Max - p_Min + 1))); 
            }
            Console.SetCursorPosition(p_Columna, p_Fila - 4);
            Console.Write("Cargado: {0} {1}", (p_Valor * s_Porcen / (double)s_Avance).ToString("N2"), " %");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.SetCursorPosition(p_Columna, p_Fila);
            Console.Write(FullProgreso.Substring(0, Convert.ToInt32 (p_Valor / s_Avance)));
        }
    }
}
Y te repito, que aunque sena apenas 10-15 líneas de código más, resulta más legible y más fácilmente modificable, también es más eficiente... el código de la función dibujar solo dibuja ciertas líneas una única y tan solo en cada ciclo redibuja lo que cambia.
(https://i.imgur.com/x9UyfT3.png)
En fin, creo que tu mayor problema es que vas a saltos, no conoces lo esencial del lenguaje, vas aprendiendo a base de tropezarte con las piedras que encuentras en el camino, y en vez de enfrentarte a ellas para apartarlas del camino (esto es entenderlas), tu lo que haces es sortearlas... así que ahí siguen y seguirán pese al tiempo que transcurra. 
Al final solo usarás del lenguaje aquello que entiendes, porque lo que no entiendes, te da pereza y huyes de ello. Así no se puede ser programador.
No puedes aprovechar el potencial de un lenguaje si no conoces al menos lo básico. No es que todo deba ser hecho de la mejor manera posible, a veces es más práctico no perder demasiado tiempo en algo a condición de que también resuelva de modo eficiente el problema en cuestión, pero tampoco tendrás opciones para ello, porque las desconoces...
			
 
			
			
				Cita de: Eleкtro en  1 Marzo 2019, 11:29 AM
El que yo uso: https://www.screentogif.com/
Muchísimas gracias mi muy distinguido amigo. ;)
En cuanto a NEBIRE. ;)
Sigo tropesando. Me dio por comprar un libro en papel barato que me da más motivación para leerlo pero en C/C++, para practicar ejercicios está bien. En C# están libros caros y grandes. Lo de grande está bien pero 80 €urazos como estoy ahora como que no. Se que está internet, también aprovechar.
En cuanto a tu código que funciona bien, en el cual agradezco. Lo entiendo mejor, por que muestras, lo hiciste con estilo y un poco pijo . ;)
En la parte
FullProgreso = new string((char)177, Cantidad);Para asegurte que se muestre bien la imágenes dependiendo quien ejecute el programa, puede mostrar diferentes caractéres.
Hay que asegurarse un tipo de codificación, algo parecido a esto.
Console.Write(Encoding.ASCII.GetBytes((char)219));Así te aseguras que en cualquier país funcione a la primera.
Gracias por los consejos. ;)
			
 
			
			
				Cita de: Meta en  2 Marzo 2019, 22:01 PM
Console.Write(Encoding.ASCII.GetBytes((char)219));
El código citado solo puede mostrar la representación por defecto a string de un array de bytes, es decir, mostrará el nombre completo del tipo ("System.Byte[]"), puesto que no se están descodificando los bytes de dicho array ( para lo que se llamaría a la función: 
Encoding.GetString(byte[]) ).
Pero en cualquier caso se utilizaría la propiedad 
Console.OutputEncoding para especificar la codificación de caracteres mostrados en el búfer de salida, o como alternativa se usaría la función 
SetConsoleOutputCP de la API de Windows quien prefiera hacerlo así.
Saludos.