TRABALHANDO COM THREADS

NALDOXD 16/07/2013 16:08:12
#426137
Boa tarde galerinha, uma dúvida rápida com vocês.. eu procurei na internet e não achei.. Hoje em minhas telas estou trabalhando com muitas threads para pesquisas.. por exemplo, quando o usuário abre a tela de cadastro de funcionários, eu disparo uma Thread para buscar todos os funcionários cadastrados e apresento na tela, caso ele clique em pesquisa antes de terminar a Thread eu dou um Stop() nela, só que estou com um problema para saber quando a Thread termina sua execução hoje eu crio um Timer e fico checando o evento IsAlive() da Thread , caso ele de false eu sei que ela terminou mas acho isso [ô]errado[ô] alguém conhece um evento ou uma forma melhor para saber exatamente quando uma Thread terminar sua execução? Vlw a todos..
OCELOT 16/07/2013 16:36:34
#426143
Resposta escolhida
Eu diria que o ideal seria a própria thread informar que acabou.

E você disse que chama o Stop para parar ela, só que não existe um método Stop na Thread, então acredito que seja o Abort que você chama, então quando se usa uma thread você deve sempre colocar dentro dela um try/catch para pegar a exception ThreadAbortException, pois ela é lançada quando se chama o método Abort e é a forma de se finalizar alguma coisa que estava fazendo antes da thread ser finalizada, como por exemplo fechar a conexão com o banco de dados, dar um rollback em alguma transação entre outras coisas.

Eu geralmente não costumo usar Threads diretamente, hoje em dia eu costumo mais usar Task, antigamente usava mais o ThreadPool.QueueUserWorkItem, só não uso o Async/Await ainda por não ter conseguido fazer funcionar com o Mono for Android, se você estiver usando o VS.Net 2012 eu recomendaria testar o Async/Await, apesar dele ser do .Net 4.5 existem bibliotecas para fazer ele funcionar em versões anteriores, com pequenas limitações, mas se você aprender a usar ele vai ver que tudo fica mais fácil.
NALDOXD 17/07/2013 10:07:54
#426185
Compreendo, vou testar o Task e o Async/Await.. Obrigado, eu uso o VS.Net 2010 com Framework 4.. e sim é Abort() no Thread, mencionei errado.
Tópico encerrado , respostas não são mais permitidas