Ir para o conteúdo do rodapé
Iron Academy Logo
Aplicação C#
Aplicação C#

Outras categorias

Mensagens de status ao vivo e indicadores de carregamento - Série de consoles Spectre

Tim Corey
9m 31s

Spectre Console é uma poderosa biblioteca .NET que permite criar aplicativos de console elegantes sem sair do C#. Em sua série de vídeos, Tim Corey descreve cada uma de suas funcionalidades. Neste vídeo sobre " Mensagens de Status e Indicadores de Carregamento ao Vivo - Série Spectre Console ", Tim se concentra no Spectre Console Status, uma ferramenta para exibir mensagens de status ao vivo e indicadores de carregamento animados enquanto um aplicativo de console executa uma tarefa de longa duração.

Neste artigo, vamos analisar mais detalhadamente o recurso de status do Spectre Console, acompanhando as explicações de Tim. Você verá como Tim primeiro configura um indicador de carregamento simples, depois o personaliza e, finalmente, o utiliza em um exemplo assíncrono mais realista para baixar dados. Ao final da demonstração, você verá como o Spectre Console facilita o fornecimento de informações claras ao usuário sobre o que está acontecendo nos bastidores.

Começando com um exemplo de status mais simples (0:31)

Tim começa mostrando os exemplos mais simples de uma mensagem de status. Ele chama:

AnsiConsole.Status()
    .Start("Carregando...", ctx =>
    {
        Thread.Sleep(3000);
    });

Esta é a maneira mais simples de adicionar um indicador de status a um projeto de console. Ele explica que dentro das chaves, você pode executar qualquer comando ou código que leve tempo. Para a demonstração, Tim usa apenas um intervalo de três segundos para simular uma operação lenta.

Ao executar este aplicativo de console, você verá imediatamente a mensagem "Carregando..." na linha, juntamente com um indicador de carregamento padrão. Esta breve demonstração mostra como o Spectre Console pode transformar até mesmo um prompt simples em algo mais dinâmico.

Spectre Console Live Status Spinners 1 related to Começando com um exemplo de status mais simples (0:31)

Personalizando o Spinner – Tipos suportados (1:54)

Às 1:54, Tim passa para a personalização. O Spectre Console vem com uma longa lista de tipos de spinners integrados, e você pode alterá-los com:

ctx.Spinner = Spinner.Known.Aesthetic;

Ele percorre os tipos disponíveis e escolhe "Estético" para mostrar que o formato do seletor pode ser alterado facilmente. Esse tipo de pequena alteração já deixa seu aplicativo de console com uma aparência mais profissional.

Spectre Console Live Status Spinners 2 related to Personalizando o Spinner – Tipos suportados (1:54)

Tim também destaca, aos 2:39, que nem todos os terminais são totalmente compatíveis com todos os tipos de indicadores de carregamento. Se você estiver executando o programa dentro do Visual Studio, poderá ver uma animação de fallback. Essa é a maneira que o Spectre Console encontra para lidar com erros de forma elegante: ele escolhe automaticamente um indicador de carregamento mais simples que seja adequado ao seu ambiente, para que o usuário ainda receba feedback.

Por que isso torna os aplicativos de console mais fáceis para o usuário (3:07)

Às 3h07, Tim faz uma pausa para explicar por que esse recurso é importante. Se o seu aplicativo estiver criando ou baixando arquivos, processando dados ou realizando qualquer tarefa demorada, uma mensagem de status com um indicador de carregamento "avisa o usuário de que algo está acontecendo". Sem ela, um console em branco pode parecer congelado.

Tim enfatiza que, quando a tarefa é concluída, o status desaparece, restando apenas as informações do resultado. Isso ajuda a manter seu aplicativo de console limpo e informativo ao mesmo tempo.

Migrando para Await AnsiConsole para trabalho assíncrono (3:24)

Até este ponto, Tim usou Start(). Mas em aplicativos reais, você provavelmente está aguardando operações. Às 3h34, ele muda para:

aguarde AnsiConsole.Status()
    .StartAsync("Carregando...", async ctx =>
    {
        // trabalho assíncrono
    });

Essa pequena alteração — usar await AnsiConsole e .StartAsync() — permite executar código assíncrono dentro do bloco de status. Tim alerta aos 4:02 que o contexto interno não é seguro para atualizações da interface do usuário em relação a múltiplas threads. Sempre "volte à thread da interface do usuário" para alterar o indicador de carregamento ou o texto de status. Essa verificação evita erros estranhos quando você tenta atualizar a partir de outra thread.

Baixando dados em loop – Uma demonstração mais realista (4:26)

Em seguida, Tim cria um loop para simular uma tarefa do mundo real: baixar 20 cursos de uma API. Ele reescreve o código para que fique assim:

para (int i = 1; i < 21; i++)
{
    ctx.Status($"Baixar curso {i}...");
    var jsonResponse = await Helpers.Fetch($"https://sample.com/courses/{i}");
    AnsiConsole.MarkupLine($"[red]Curso {i} baixado[/]");
}

Aqui ele mostra três recursos importantes do Spectre Console funcionando em conjunto:

  • Context.Status() altera dinamicamente a string de status exibida ao lado do indicador de carregamento.

  • await Helpers.Fetch(...) representa uma tarefa assíncrona real dentro do seu aplicativo de console.

  • AnsiConsole.MarkupLine() usa a linguagem de marcação do Spectre para adicionar cores. Tim escolhe [vermelho] apenas "para ter algo divertido para fazer".

Este exemplo mostra como é fácil adicionar feedback de progresso a um projeto sem usar código complexo.

Visualizando o aplicativo em execução (7:21)

Quando Tim executa o novo código, você vê um indicador verde (o tipo estético do tema dele) e o texto de status mudando para "Baixando curso 1…", "Baixando curso 2…", etc. À medida que cada download termina, uma linha vermelha aparece: "Curso 1 baixado", "Curso 2 baixado".

Spectre Console Live Status Spinners 3 related to Visualizando o aplicativo em execução (7:21)

Tim observa que essa é uma ótima maneira de acompanhar tarefas como o envio de dados ou o processamento de arquivos. "Você deixa para trás as mensagens de resultado, mas não tem mais aquela mensagem de espera durante o download", explica ele às 7:27.

Spectre Console Live Status Spinners 4 related to Visualizando o aplicativo em execução (7:21)

Síncrono vs. Assíncrono – Sem diferença de desempenho (8:00)

Às 8h, Tim aborda o tema da performance. Usar Start() em vez de StartAsync() não altera a velocidade da animação do spinner. O que importa é se o seu código interno é assíncrono. Se você estiver usando await, você precisa de .StartAsync(); Caso contrário, .Start() funciona bem.

Isso significa que você pode adicionar feedback de status ao seu aplicativo de console sem se preocupar em torná-lo mais lento. Ele simplesmente engloba qualquer trabalho que você já esteja fazendo.

Spinners integrados e personalizados – Uma longa lista para conferir (8:45)

Ao concluir, Tim destaca que o Spectre Console oferece "inúmeros" spinners integrados. Você pode percorrer a lista e escolher o que mais gostar — desde pontos e setas até opções "estéticas". Mais adiante na série, Tim mostrará como criar um spinner personalizado para que você possa combiná-lo totalmente com a identidade visual ou as cores do seu aplicativo.

Essa flexibilidade é parte do que torna o Spectre Console uma ótima ferramenta para criar aplicativos de console com visual incrível. Ele fornece feedback sobre o progresso, resultados imediatos e recursos visuais dinâmicos sem reinventar a roda.

Conclusão – Status do Console Spectre em ação (9:07)

Seguindo o vídeo de Tim Corey, vimos como usar o Spectre Console Status para aprimorar um aplicativo de console .NET :

  • Use AnsiConsole.Status().Start() ou aguarde AnsiConsole.Status().StartAsync() para exibir um indicador de carregamento e um texto de status enquanto uma tarefa é executada.

  • Atualize o context.Status() dinamicamente dentro do seu loop.

  • Exiba os resultados com AnsiConsole.MarkupLine() e marcação Spectre para vermelho, verde ou outras cores.

  • Escolha entre uma lista de seletores predefinidos ou crie o seu próprio mais tarde.

  • Forneça informações claras ao usuário, mantendo a saída do console organizada.

Esses pequenos detalhes podem transformar um projeto de console comum em um aplicativo de console incrível. O recurso de status do Spectre Console facilita o compartilhamento do progresso, a verificação de resultados e torna as mensagens do seu aplicativo mais amigáveis ​​e interativas.

Hero Worlddot related to Mensagens de status ao vivo e indicadores de carregamento - Série de consoles Spectre
Hero Affiliate related to Mensagens de status ao vivo e indicadores de carregamento - Série de consoles Spectre

Ganhe mais compartilhando o que você ama.

Você cria conteúdo para desenvolvedores que trabalham com .NET, C#, Java, Python ou Node.js? Transforme sua expertise em renda extra!

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim