sergiofer Posted September 21, 2009 at 11:21 PM Report Share #288087 Posted September 21, 2009 at 11:21 PM Boa noite a todos Estou com um pequeno problema, estou a fazer uma pequena aplicação que comunica com a porta série, e faz uma actualização de um array consoante a resposta que recebo da porta série. Para fazer isto, tenho que esperar um pequeno tempo, desde que envio o pedido á porta série, ate ir ler, para isso estou a usar a seguinte instrução: System.Threading.Thread.Sleep(100) O problema, é que esta instrução faz com que a aplicação deixe de responder por momentos, aos outros eventos da aplicação. Existe alguma outra maneira de fazer isto (Delay) de forma a que os outros eventos não deixem de responder? Obrigado a todos pela ajuda. Link to comment Share on other sites More sharing options...
jpaulino Posted September 22, 2009 at 07:16 AM Report Share #288096 Posted September 22, 2009 at 07:16 AM Podes fazer duas coisas: 1 - Colocar a rotina que comunica com a porta série numa tarefa em separado, usando uma thread ou um backgroundworker (recomendado) 2 - Podes acrescentar a instrução Application.DoEvents() para permitir o sistema trabalhar Dim delay As Integer = 5 Dim startTime As DateTime = Now.AddSeconds(delay) While Now <= startTime System.Threading.Thread.Sleep(50) Application.DoEvents() End While MessageBox.Show("Done!") Link to comment Share on other sites More sharing options...
sergiofer Posted September 22, 2009 at 09:34 PM Author Report Share #288209 Posted September 22, 2009 at 09:34 PM Como é que posso fazer isso da thread separada? Desculpem as perguntas, mas ainda estou a começar. Obrigado Link to comment Share on other sites More sharing options...
bruno1234 Posted September 22, 2009 at 09:41 PM Report Share #288210 Posted September 22, 2009 at 09:41 PM É como o JPaulino disse, através de um BackgroundWorker. Googla por um exemplo de como o usar, vais ver q é mto simples. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
jpaulino Posted September 22, 2009 at 10:27 PM Report Share #288220 Posted September 22, 2009 at 10:27 PM http://garylima.blogspot.com/2009/09/backgroundworker.html Link to comment Share on other sites More sharing options...
ribeiro55 Posted September 23, 2009 at 12:43 PM Report Share #288278 Posted September 23, 2009 at 12:43 PM E é preciso ir tão longe? 🙂 http://wiki.portugal-a-programar.pt/dev_net:vb.net:backgroundworkers Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
sergiofer Posted September 24, 2009 at 07:59 PM Author Report Share #288529 Posted September 24, 2009 at 07:59 PM Boa noite a todos Ao experimentar o background worker, com o seguinte codigo: Form1.ValorEscreverCOM.Text = PLCPC_String(1) + Chr(13) Form1.EscreverCOM.PerformClick() Obtive um erro que diz: Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. O que eu estou a tentar fazer, é usar um ciclo que ja existe na form1, para fazer a comunicação série, atraves de outra form. Existe alguma maneira de fazer isto? Obrigado a todos Link to comment Share on other sites More sharing options...
bruno1234 Posted September 24, 2009 at 08:11 PM Report Share #288536 Posted September 24, 2009 at 08:11 PM Estás a tentar aceder ao Form1 dentro do backgroundWorker? Se for o caso é capaz de estar a atrofiar por causa disso, o Form pertence a outra thread. A abordagem deve ser assim: -Criar o bckWorker e mete-lo a correr. -Afectar o argumento Result dos DoWorkEventArgs (no bckgroundWorker) -Qd disparar o evento na Form1, afectar na minha form o q for preciso com o Result (desta vez em RunWorkerCompletedEventArgs). Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
sergiofer Posted September 24, 2009 at 09:19 PM Author Report Share #288545 Posted September 24, 2009 at 09:19 PM Estás a tentar aceder ao Form1 dentro do backgroundWorker? Se for o caso é capaz de estar a atrofiar por causa disso, o Form pertence a outra thread. A abordagem deve ser assim: -Criar o bckWorker e mete-lo a correr. -Afectar o argumento Result dos DoWorkEventArgs (no bckgroundWorker) -Qd disparar o evento na Form1, afectar na minha form o q for preciso com o Result (desta vez em RunWorkerCompletedEventArgs). Ok Obrigado Vou testar dessa maneira, mas tenho que fazer algumas alterações de estrutura, por isso pode demorar algum tempo 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