Usuário com melhor resposta
Trabalhar com threads em WPF

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?????
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
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 -
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. -
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