none
Trabalhar com threads em WPF RRS feed

  • Pergunta

  • Boa tarde Senhores,

    Estou trabalhando em um projeto que integra WPF e Windows Forms. Praticamente tudo em consegui integrar. Nas minhas aplicações em Windows Forms eu trabalho com threads da seguinte forma:

    Crio a thread com um nome, por exemplo: trd. E chamo o método "CheckForIllegalCrossThreadsCalls = false" para permirtir a intergração com a thread principal onde estão meus componentes visuais. Logo após eu instancio a trd passando uma função que eu quero que execute em paralelo: trd = new Thread(new ThreadStart(Processa));

    Quando tento fazer a mesma coisa em WPF dá um erro. Alguem pode me ajudar?????
    quinta-feira, 14 de janeiro de 2010 18:39

Respostas

  • Sim, isso não é possível em WPF. WPF usa as threads de maneira diferente do Windows Forms. Você não pode modificar nada visual em threads secundárias. Use as threads secundárias para cálculos e quando quiser mudar algo visual, você precisa estar no contexto da thread primária.

    Dê uma olhada aqui http://msdn.microsoft.com/en-us/library/ms741870.aspx para ver o modelo de threads do WPF.

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino
    • Marcado como Resposta Jomar Sales sábado, 16 de janeiro de 2010 13:57
    sábado, 16 de janeiro de 2010 09:09

Todas as Respostas

  • Você não pode acessar os componentes visuais na thread secundária. Sugiro que use o BackgroundWorker, que permite acessar os componentes no evento ProgressChanged, que é chamad no contexto da thread primária. Dê uma olhada em

    http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and-reporting-the-progress-to-the-ui/

    Bruno
    MVP Client Development - http://msmvps.com/blogs/bsonnino
    quinta-feira, 14 de janeiro de 2010 21:33
  • Quando você diz que eu não posso acessar os componentes visuais na thread secundária, você diz em WPF? Porque em Windows Form, com a chamada "CheckForIllegalCrossThreadsCalls = false" eu posso. Sempre usei assim e consigo criar e gerenciar vários processos ao mesmo tempo.
    O que eu quero é simplesmente poder criar uma função com algumas tarefas que modificam caracteristicas de alguns componentes visuais e poder executar essas funções em threas diferentes da principal. Por exemplo: crio uma função private void processa(){...} e chamo esta função em outra thread.
    sexta-feira, 15 de janeiro de 2010 10:57
  • Sim, isso não é possível em WPF. WPF usa as threads de maneira diferente do Windows Forms. Você não pode modificar nada visual em threads secundárias. Use as threads secundárias para cálculos e quando quiser mudar algo visual, você precisa estar no contexto da thread primária.

    Dê uma olhada aqui http://msdn.microsoft.com/en-us/library/ms741870.aspx para ver o modelo de threads do WPF.

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino
    • Marcado como Resposta Jomar Sales sábado, 16 de janeiro de 2010 13:57
    sábado, 16 de janeiro de 2010 09:09