Como posso adicionar um atraso a um programa em c #?
Como posso adicionar um atraso a um programa em c #?
Respostas:
Você pode usar a Thread.Sleep()função, por exemplo
int milliseconds = 2000;
Thread.Sleep(milliseconds);
que interrompe completamente a execução do encadeamento atual por 2 segundos.
Provavelmente, o cenário mais apropriado Thread.Sleepé quando você deseja atrasar as operações em outro encadeamento, diferente do principal, por exemplo:
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
Para outros cenários (por exemplo, iniciar operações após algum tempo etc.), verifique a resposta de Cody .
await Task.Delay(milliseconds). Isso funcionou para mim :)
Use um cronômetro com um intervalo definido para 2 a 3 segundos.
Você tem três opções diferentes para escolher, dependendo do tipo de aplicativo que está escrevendo:
Não use Thread.Sleepse seu aplicativo precisar processar qualquer entrada nesse thread ao mesmo tempo (WinForms, WPF), pois Sleepele trancará completamente o thread e impedirá que ele processe outras mensagens. Supondo que um aplicativo de thread único (como a maioria), todo o aplicativo parará de responder, em vez de apenas atrasar uma operação como você provavelmente pretendia. Observe que pode ser bom usar o modo de suspensão no aplicativo de console puro, pois não há "eventos" para manipular ou em um thread separado (também Task.Delayé a melhor opção).
Além dos timers e Sleepvocê pode usar a Task.Delayversão assíncrona Sleepque não impede o encadeamento de processar eventos (se usado corretamente - não o transforme em suspensão infinita .Wait()).
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
O mesmo await Task.Delay(2000)pode ser usado no Mainmétodo de um aplicativo de console se você usar o C # 7.1 ( Async main nos blogs do MSDN ).
Nota: atrasar a operação com Sleeptem o benefício de evitar condições de corrida resultantes do início potencial de várias operações com temporizadores / Delay. Infelizmente, o congelamento de aplicativos baseados na interface do usuário não é aceitável, portanto, é necessário pensar no que acontecerá se você iniciar vários atrasos (por exemplo, se for acionado por um clique no botão) - considere desativar esse botão ou cancelar o cronômetro / tarefa ou verificar atrasos A operação pode ser feita várias vezes com segurança.
Thread.Sleepaviso pode não ser tão importante.
await Task.Delay()a versão e comentário em linha que console app realmente provável quer para uso Sleep(não assíncrona Main) ou Delay(assíncrono Main)
Por 2,3 segundos, você deve fazer:
System.Threading.Thread.Sleep(2300);
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
Ou com usingdeclarações:
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
Eu prefiro isso 1000 * numSeconds(ou simplesmente 3000) porque torna mais óbvio o que está acontecendo com alguém que nunca usou Thread.Sleepantes. Documenta melhor sua intenção.
Thread.Sleep(TimeSpan)diretamente, sem precisar converter para um int.