Jump to content

Delay em VB.Net


sergiofer
 Share

Recommended Posts

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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.