jintonico Posted April 30, 2008 at 04:15 PM Report Share #182662 Posted April 30, 2008 at 04:15 PM Boas: Tou a iniciar-me nesta coisa das threads e tou aqui com uma dúvida provavelmente existencial: mail = new Thread(new ThreadStart(this.enviaMail)); mail.IsBackground = true; mail.Start(); Quando este código é corrido, o método enviaMail é executado, e após a sua execução ele esta thread fica em memória. Se eu quiser voltar a correr esta thread, como e q faço? Basta voltar a chamar o método? tks in advance Link to comment Share on other sites More sharing options...
TheDark Posted April 30, 2008 at 07:49 PM Report Share #182712 Posted April 30, 2008 at 07:49 PM Tens que criar um novo objecto Thread, e sobre esse fazer Start. Desaparecido. Link to comment Share on other sites More sharing options...
jintonico Posted May 2, 2008 at 09:44 AM Author Report Share #182974 Posted May 2, 2008 at 09:44 AM Tive a pesquisar mais um bocado, encontrei que não era possivel fazer o q pretendo... Uma thread dpois de terminar a sua execução não pode voltar a ser executada (a mesma thread). Tens que criar um novo objecto Thread, e sobre esse fazer Start. Já tinha pensado nisso, mas assim fico com um possivel problema: dpois da execução da thread, ela fica em memoria, mm adormecida? Ou quando ela termina a sua execução "simplesmente" desapareçe? Se for este ultimo caso fico com o meu problema resolvido, senão vou ter q arranjar outra solução... Link to comment Share on other sites More sharing options...
TheDark Posted May 2, 2008 at 03:25 PM Report Share #183024 Posted May 2, 2008 at 03:25 PM Fica em memória o objecto Thread, mas não fica em execução. O objecto só desaparecerá quando for executado o Garbage Collector. Desaparecido. Link to comment Share on other sites More sharing options...
jintonico Posted May 5, 2008 at 10:49 AM Author Report Share #183399 Posted May 5, 2008 at 10:49 AM Obrigado pelas dicas. Entretanto para resolver o meu problema do mail (sempre que enviava um mail o programa parava durante um bocado) acabei por utilizaras operações assincronas que o SmtpClient disponibilizava, assim posso somente chamar o método e n preciso de me procupar com o resto. O código ficou qq coisa deste genero: System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient(servidorSMTP, porta); try { sc.SendCompleted += new SendCompletedEventHandler(sc_SendCompleted); sc.SendAsync(mm, null); } catch (Exception e) { this.SetText(e.Message); } ("..................................") void sc_SendCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Cancelled) this.SetText("\nEnvio do mail cancelado\n"); else if (e.Error != null) this.SetText("\nErro: " + e.Error.ToString() + "\n"); else this.SetText("\nMail enviado\n"); } Os créditos vão para aqui: 👍 http://olondono.blogspot.com/2008/02/sending-mail-using-smtpclient.html Link to comment Share on other sites More sharing options...
DanielAmorim Posted May 6, 2008 at 01:03 AM Report Share #183530 Posted May 6, 2008 at 01:03 AM Basicamente estavas a ter problema em reinventar a roda 👍 Para resolver a tua questão podias ter utilizado uma Thread do ThreadPool 😄 Assim não te tinhas de preocupar com a gestão do ciclo de vida da Thread, seria o ThreadPool a fazer isso. O ThreadPool está optimizado para ter sempre disponível, a não se que atinjas o limite de Threads possíveis, e deste modo é minimizado o tempo de criação de uma Thread e evitado que haja colecta de objecto desncessáriamente. A solução por ti implementada acaba por internamente utilizar o ThreadPool 😉 Daniel Amorim VP for xRTML http://www.xrtml.org http://www.realtime.co Link to comment Share on other sites More sharing options...
jintonico Posted May 6, 2008 at 11:22 AM Author Report Share #183565 Posted May 6, 2008 at 11:22 AM Obrigado... da próxima vez que necessitar de utiliza-las vou pegar por ai... conhecimento teorico sobre isto nunca e dmais (já dizia um prof meu: não há nada mais prático do que uma boa teoria) Entretanto aqui fica o meu conselho: fujam das threads como o diabo foge da cruz... 👍 as threads tornam o debug das aplicações um pesadelo (pelo menos no VS 2005). Link to comment Share on other sites More sharing options...
DanielAmorim Posted May 6, 2008 at 12:39 PM Report Share #183574 Posted May 6, 2008 at 12:39 PM Entretanto aqui fica o meu conselho: fujam das threads como o diabo foge da cruz... 👍 as threads tornam o debug das aplicações um pesadelo (pelo menos no VS 2005). Não penses assim 😉 É verdade que o desenvolvimento de aplicações multithreading tem maior dificuldade pois é necessário um role de preocupações que não existiam nas aplicações singlethread, mas hoje em dia não há como fugir do multithread! É necessário aproveitar os recursos computacionais disponíveis ao máximo e isso apenas conseguimos com mais que um fio de execução a correr em simultâneo 😄 Daniel Amorim VP for xRTML http://www.xrtml.org http://www.realtime.co Link to comment Share on other sites More sharing options...
TheDark Posted May 6, 2008 at 02:02 PM Report Share #183591 Posted May 6, 2008 at 02:02 PM Multithreading é o futuro. Dentro de não muito tempo quem tiver bons conhecimentos de programação concorrente estará garantido. Desaparecido. Link to comment Share on other sites More sharing options...
jintonico Posted May 6, 2008 at 04:02 PM Author Report Share #183613 Posted May 6, 2008 at 04:02 PM Multithreading é o futuro. Dentro de não muito tempo quem tiver bons conhecimentos de programação concorrente estará garantido. Concordo plenamente!! 🙂 Uma das pesquisas que fiz foi de como fazer debug a uma aplicação multithread, e deparei-me com várias mensagens de pessoal a queixar-se do facto de não ser muito fácil fazer o debug neste tipo de aplicações no VS 2005 e que no 2008 era bastante mais fácil. Para que usa, como e q fazem debug deste tipo de aplicações no VS2005? Através do freeze e thaw? (as vezes a aplicação tinha um comportamento estranho) Ou existe outro modo? Eu utilizei isto juntamente com uns consoles.writelnes Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now