none
Fechar aplicação com diversos forms por inatividade RRS feed

  • Pergunta

  • Olá!

    Consigo fechar um formulário usando um timer. Mas gostaria de saber como fazer isso sem precisar adicionar um timer em cada form. É possível fazer desta maneira?

    terça-feira, 20 de setembro de 2016 18:45

Respostas

  • Olá,

    Você não precisa ter um timer em cada form, apenas no form principal (que chama os outros forms).

    Portanto, se vc tiver um timer no form principal, quando esse timer atingir o tempo desejado, faz o comando:

    Application.Exit();

    Assim toda a aplicação será fechada, independente da quantidade de forms abertos

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Sugerido como Resposta Mariana C. Costa terça-feira, 20 de setembro de 2016 20:23
    • Marcado como Resposta LD_7 quarta-feira, 21 de setembro de 2016 12:06
    terça-feira, 20 de setembro de 2016 18:59

Todas as Respostas

  • Olá,

    Você não precisa ter um timer em cada form, apenas no form principal (que chama os outros forms).

    Portanto, se vc tiver um timer no form principal, quando esse timer atingir o tempo desejado, faz o comando:

    Application.Exit();

    Assim toda a aplicação será fechada, independente da quantidade de forms abertos

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Sugerido como Resposta Mariana C. Costa terça-feira, 20 de setembro de 2016 20:23
    • Marcado como Resposta LD_7 quarta-feira, 21 de setembro de 2016 12:06
    terça-feira, 20 de setembro de 2016 18:59
  • Muito obrigado, @André!

    Eu coloquei um DialogResult para exibir uma mensagem ao usuário avisando que a aplicação foi encerrada por inatividade e executar o Application.Exit() quando for clicado no botão 'OK'. Porém, o programa está abrindo vários MessageBox de uma vez só. Parece que ele entra em um loop infinito, apesar de o programa executar o ShowDialog apenas quando o tempo de inatividade é atingido.

            private void timer1_Tick(object sender, EventArgs e)
            {
                try
                {                
                    if (MinutosInatividade != 0)
                    {
                        if ((MinutosInatividade * 60 * 100) < (Environment.TickCount - Program.minutoslogados))
                        {                        
                            DialogResult dialogResult = MessageBox.Show("O progarma foi encerrado por inatividade.",
                    "Inatividade", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            if (dialogResult == DialogResult.OK)
                            {
                                Application.Exit();
                            }                        
                        }
                    }
    
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

    quarta-feira, 21 de setembro de 2016 12:14
  • Opa,

    Acredito que esteja porque o timer tem exatamente esse comportamento. Ele fica em loop e roda no tempo definido por você até que adicione um comando de parada, nesse caso: timer1.Stop();

    Deixe seu código assim que deverá funcionar:

            private void timer1_Tick(object sender, EventArgs e)
            {
                try
                {                
                    if (MinutosInatividade != 0)
                    {
                        if ((MinutosInatividade * 60 * 100) < (Environment.TickCount - Program.minutoslogados))
                        {
                            timer1.Stop();                       
                            DialogResult dialogResult = MessageBox.Show("O progarma foi encerrado por inatividade.",
                    "Inatividade", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            if (dialogResult == DialogResult.OK)
                            {
                                Application.Exit();
                            }                        
                        }
                    }
    
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 21 de setembro de 2016 12:30
  • Valeu, @André!

    Era exatamente isso!

    Parou com o loop das janelas.

    Abs!!!

    quarta-feira, 21 de setembro de 2016 13:11