• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

sergiofer

Delay em VB.Net

9 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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!")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que posso fazer isso da thread separada?

Desculpem as perguntas, mas ainda estou a começar.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É como o JPaulino disse, através de um BackgroundWorker.

Googla por um exemplo de como o usar, vais ver q é mto simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora