none
Thread para cada form aberto RRS feed

  • Pergunta

  • Boa Tarde,

    Preciso desenvolver um software que tenha a possibilidade de executar mais de uma mesma tarefa por cada instancia de um form aberto, por exemplo, teria um form principal e em cada form aberto do menu, ele ficaria executando um processo. Para isso acredito ser necessario que o processamento de cada form seja executado em uma thread diferente para nao bloquear o form principal que possibilita abrir outras instancias deste mesmo form.

    Estou fazendo uma prova de conceito na qual abro uma thread neste form aberto e executa um contador quase infinito, porem ele continua bloqueando o form principal.

    O que eu teria de fazer neste caso?

    Obrigado desde ja.
    "O pior naufrágio é daquele que não saiu do porto"
    domingo, 10 de janeiro de 2010 20:59

Todas as Respostas

  • Michel,

    Para não bloquear o formulário principal abra os formulários como modeless.

    Displaying Modal and Modeless Windows Forms
    http://msdn.microsoft.com/en-us/library/aa984358%28VS.71%29.aspx

    Por exemplo, digamos que você tenha um formulário chamado SeuForm que realiza uma operação qualquer quando é aberto. No código abaixo, o formulário abre e após 5 segundos é fechado (somente para simular um processamento).

    // método chamado quando o formulário é aberto
    private void SeuForm_Load(object sender, EventArgs e)
    {
        Thread t = new Thread(new ThreadStart( () => {
            Thread.Sleep(5000);  // aqui estou simulando um processamento
            FecharFormulario();               
        }));
        t.Start();
    }

    // fecha formulário
    private void FecharFormulario()
    {
        if (this.InvokeRequired)
            this.Invoke(new MethodInvoker(FecharFormulario));
        else
            Close();
    }

    No formulário principal você mostraria o formulário acima da seguinte maneira:

    // algum item de menu foi clicado
    private void SeuMenuItem_Click(object sender, EventArgs e)
    {
        SeuForm f = new SeuForm();
        f.MdiParent = this;
        f.Show();
    }


    Se você verificar, no formulário principal é possível abrir diversos formulários "SeuForm" e o formulário principal não é bloqueado.

    Espero ter sido claro.

    Att.

    Ari C. Raimundo
    MCAD, MCP
    http://araimundo.blogspot.com
    • Sugerido como Resposta Danimar Ribeiro terça-feira, 19 de janeiro de 2010 01:41
    segunda-feira, 11 de janeiro de 2010 03:12
    Moderador
  • Olá Michel...


    Gostaria de saber se sua necessidade foi resolvida e caso positivo, como foi feito?

    Estou com uma situação parecida e estou pesquisando como fazer.

     

    Obrigado


    Anderson Zanardi
    sexta-feira, 3 de dezembro de 2010 18:21