none
[C#] Criar loading em travamento da form RRS feed

  • Pergunta

  • Eu queria saber como é possível, pegar um travamento de uma form e usar uma função até que esse travamento passe. Por exemplo, eu tenho um Formulário (Principal) nele tem um botão, e quando eu clico nesse botão, ele abre outro Formulário (Segundo). Esse "Segundo" é bem pesado e nele ocorre um travamento, seria possível pegar esse travamento em um try/catch e executar uma função enquanto ele destrave, por exemplo uma gif de uma página carregando?
    sexta-feira, 18 de dezembro de 2015 18:07

Respostas

Todas as Respostas

  • Eu publiquei um pequeno tutorial sobre isso, da uma olhada:

    http://www.c-sharpcorner.com/UploadFile/27c648/making-a-simple-non-freezing-window-forms-application/


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    • Sugerido como Resposta SimorC sexta-feira, 18 de dezembro de 2015 20:20
    • Marcado como Resposta Marcos SJ sexta-feira, 18 de dezembro de 2015 20:27
    sexta-feira, 18 de dezembro de 2015 18:54
  • Entendi mais ou menos o que quis dizer no post, mas quando ele travou, qual foi a função executada?
    sexta-feira, 18 de dezembro de 2015 19:07
  • Entendi mais ou menos o que quis dizer no post, mas quando ele travou, qual foi a função executada?

    Boa tarde.

    Um dos últimos parágrafos:

    I placed the word ASYNC at click event method to avoid our UI to freeze. At our event look to TASK that make our count. Inside it you will see the method UpdateUI, that refresh the label 50ms each.


    Att., Rafael Simor

    sexta-feira, 18 de dezembro de 2015 20:22
  • Acho que não entendeu muito bem, quando o meu Form (Segundo) inicia, ele demora pra aparecer algumas coisas, daí eu queria colocar uma função enquanto ele demorar.
    sábado, 19 de dezembro de 2015 11:10
  • No meu caso não seria melhor usar um thread?
    sábado, 19 de dezembro de 2015 11:37
  • Se tem o Skype como exemplo:

    sábado, 19 de dezembro de 2015 15:24
  • Aqui os dois eventos:

    //Evento que da freeze na app
    private void button1_Click(object sender, EventArgs e)
            {
                for (var i = 0; i <= 1000000; i++)
                {
                    label1.Text = @"Count : " + i;
                }
            }
    
    //evento que evita freeze
            private async void button2_Click(object sender, EventArgs e)
            {
                button1.Enabled = false;
                button2.Enabled = false;
                var count = 0;
    
                await Task.Run(() =>
                {
                    for (var i = 0; i <= 1000000; i++)
                    {
                        UpdateUI(i);
                        count = i;
                    }
                });
                label1.Text = @"Count : " + count;
                button1.Enabled = true;
                button1.Enabled = false;
            }


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    segunda-feira, 21 de dezembro de 2015 11:38
  • O uso de thread é o mesmo conceito de usar async. A vantagem de usar async é que fica muito mais simples escrever um código assincrono. Usar thread daria o mesmo resultado porém você teria que escrever muito mais código pra obter o mesmo resutlado.

    Trecho do livro Async in C# 5.0, O'Reilly

    The feature makes asynchronous programming a lot easier by eliminating the need for
    complex patterns that were necessary in previous versions of C#. With it, we can reasonably
    write entire programs in an asynchronous style.


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    segunda-feira, 21 de dezembro de 2015 11:43