none
Delay em C#? RRS feed

  • Pergunta

  • Olá, sou novato em C#, e gostaria de entender como usar "delay" nesta linguagem, já entendi o  Thread.Sleep, porém preciso de um que não trave o programa.

    Estou fazendo um bem básico, e gostaria do seguinte: 

    Iniciar programa> Cor default>2 segundos depois>Cor Preta>2 segundos depois>Cor azul>2 segundos depois>...

    Obrigado!


    • Editado ooNCyber sexta-feira, 25 de março de 2016 21:56
    sexta-feira, 25 de março de 2016 21:46

Respostas

  • Creio que não,

    faça o seguinte. Crie um novo projeto Windows Application em C# com o nome de Cores. Coloque apenas um textbox no form, sem formatar nada.

    Depois substitua o código todo do form por este:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Cores
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Tempo();
            }
    
            private int dois = 0;
            private Timer Timer1 = new Timer {Interval = 2000, Enabled = true};
    
            private void Tempo()
            {
                Timer1.Tick += (s, e) =>
                {
                    dois++;
                    switch (dois)
                    {
                        case 1:
                            textBox1.BackColor = Color.Black;
                            break;
                        case 2:
                            textBox1.BackColor = Color.Yellow;
                            break;
                        case 3:
                            textBox1.BackColor = Color.Red;
                            break;
                        case 4:
                            textBox1.BackColor = Color.White;
                            break;
                    }
                };
            }
        }
    }
    
    
    Veja se funciona ...


    Antero Marques

    __________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.




    • Editado Antero Marques domingo, 27 de março de 2016 12:30
    • Marcado como Resposta ooNCyber domingo, 27 de março de 2016 12:35
    domingo, 27 de março de 2016 12:24
  • Trata-se de uma manipulação de eventos.

    Dê uma olhada neste link para entender melhor:

    Como realizar e cancelar a assinatura de eventos (Guia de Programação em C#)

    Att,


    Antero Marques

    ________________________________________________________________________


    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    • Editado Antero Marques domingo, 27 de março de 2016 13:34
    • Marcado como Resposta ooNCyber domingo, 27 de março de 2016 13:59
    domingo, 27 de março de 2016 13:33

Todas as Respostas

  • Você pode utilizar o Timer, que é um objeto!

    Eu utilizei o seguinte código:

    int x = 0;
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (x < 200)
                {
                    textBox1.BackColor = Color.Black;
                    x++;
                }
                 else if (x < 400)
                {
                    textBox1.BackColor = Color.Blue;
                    x++;
                }
                else if (x < 600)
                {
                    textBox1.BackColor = Color.Red;
                    x++;
                }
                else if (x < 800)
                {
                    x = 0;
                    ////Depois de Vermelho ele deve retornar ao preto! 
                }
            }


    sábado, 26 de março de 2016 04:42
  • Você pode utilizar o Timer, que é um objeto!

    Eu utilizei o seguinte código:

    int x = 0;
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (x < 200)
                {
                    textBox1.BackColor = Color.Black;
                    x++;
                }
                 else if (x < 400)
                {
                    textBox1.BackColor = Color.Blue;
                    x++;
                }
                else if (x < 600)
                {
                    textBox1.BackColor = Color.Red;
                    x++;
                }
                else if (x < 800)
                {
                    x = 0;
                    ////Depois de Vermelho ele deve retornar ao preto! 
                }
            }

    Olá, o código não funcionou, ele só deixa o textBox1 preto.
    sábado, 26 de março de 2016 11:23
  • Cara, dá uma olhada, ainda usando Timer:

            private void Form1_Load(object sender, EventArgs e)
            {
                Tempo();
            }
    
            private int dois = 0;
            private Timer Timer1 = new Timer {Interval = 2000, Enabled = true};
    
            private void Tempo()
            {
                Timer1.Tick += (s, e) =>
                {
                    dois++;
                    switch (dois)
                    {
                        case 1:
                            textBox1.BackColor = Color.Black;
                            break;
                        case 2:
                            textBox1.BackColor = Color.Yellow;
                            break;
                        case 3:
                            textBox1.BackColor = Color.Red;
                            break;
                        case 4:
                            textBox1.BackColor = Color.White;
                            break;
                    }
                };
            }

    Att,


    Antero Marques

    _________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    sábado, 26 de março de 2016 20:04
  • Cara, dá uma olhada, ainda usando Timer:

            private void Form1_Load(object sender, EventArgs e)
            {
                Tempo();
            }
    
            private int dois = 0;
            private Timer Timer1 = new Timer {Interval = 2000, Enabled = true};
    
            private void Tempo()
            {
                Timer1.Tick += (s, e) =>
                {
                    dois++;
                    switch (dois)
                    {
                        case 1:
                            textBox1.BackColor = Color.Black;
                            break;
                        case 2:
                            textBox1.BackColor = Color.Yellow;
                            break;
                        case 3:
                            textBox1.BackColor = Color.Red;
                            break;
                        case 4:
                            textBox1.BackColor = Color.White;
                            break;
                    }
                };
            }

    Att,


    Antero Marques

    _________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    Então, coloquei o textbox pra testar no Form1, fui debuggar e ele simplesmente não aparece :v
    sábado, 26 de março de 2016 22:52
  • ooNCyber,

    então tem algum problema no seu projeto de teste. O que fiz aqui está funcionando normalmente.

    Baixe meu projeto de exemplo e teste:

    Projeto Teste

    Att,


    Antero Marques

    __________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    domingo, 27 de março de 2016 04:05
  • ah, entendi, meu VS é de 2010, não consegui abrir, será por isso os erros com o Timer?
    domingo, 27 de março de 2016 11:48
  • Creio que não,

    faça o seguinte. Crie um novo projeto Windows Application em C# com o nome de Cores. Coloque apenas um textbox no form, sem formatar nada.

    Depois substitua o código todo do form por este:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Cores
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Tempo();
            }
    
            private int dois = 0;
            private Timer Timer1 = new Timer {Interval = 2000, Enabled = true};
    
            private void Tempo()
            {
                Timer1.Tick += (s, e) =>
                {
                    dois++;
                    switch (dois)
                    {
                        case 1:
                            textBox1.BackColor = Color.Black;
                            break;
                        case 2:
                            textBox1.BackColor = Color.Yellow;
                            break;
                        case 3:
                            textBox1.BackColor = Color.Red;
                            break;
                        case 4:
                            textBox1.BackColor = Color.White;
                            break;
                    }
                };
            }
        }
    }
    
    
    Veja se funciona ...


    Antero Marques

    __________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.




    • Editado Antero Marques domingo, 27 de março de 2016 12:30
    • Marcado como Resposta ooNCyber domingo, 27 de março de 2016 12:35
    domingo, 27 de março de 2016 12:24
  • Creio que não,

    faça o seguinte. Crie um novo projeto Windows Application em C# com o nome de Cores. Coloque apenas um textbox no form, sem formatar nada.

    Depois substitua o código todo do form por este:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Cores
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Tempo();
            }
    
            private int dois = 0;
            private Timer Timer1 = new Timer {Interval = 2000, Enabled = true};
    
            private void Tempo()
            {
                Timer1.Tick += (s, e) =>
                {
                    dois++;
                    switch (dois)
                    {
                        case 1:
                            textBox1.BackColor = Color.Black;
                            break;
                        case 2:
                            textBox1.BackColor = Color.Yellow;
                            break;
                        case 3:
                            textBox1.BackColor = Color.Red;
                            break;
                        case 4:
                            textBox1.BackColor = Color.White;
                            break;
                    }
                };
            }
        }
    }
    
    
    Veja se funciona ...


    Antero Marques

    __________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.




    Funcionou! Obrigado!

    Mais duas coisa, rs, para que serve o comando abaixo? E, tem algum site que explique detalhado sobre esse evento para iniciantes? 

    Timer1.Tick += (s, e) =>

    • Marcado como Resposta ooNCyber domingo, 27 de março de 2016 13:59
    • Não Marcado como Resposta ooNCyber domingo, 27 de março de 2016 13:59
    domingo, 27 de março de 2016 12:39
  • Trata-se de uma manipulação de eventos.

    Dê uma olhada neste link para entender melhor:

    Como realizar e cancelar a assinatura de eventos (Guia de Programação em C#)

    Att,


    Antero Marques

    ________________________________________________________________________


    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    • Editado Antero Marques domingo, 27 de março de 2016 13:34
    • Marcado como Resposta ooNCyber domingo, 27 de março de 2016 13:59
    domingo, 27 de março de 2016 13:33
  • Certo! Obrigado a todos pela ajuda.
    domingo, 27 de março de 2016 14:00