Ir para o conteúdo
sergiofer

Delay em VB.Net

Mensagens Recomendadas

sergiofer    0
sergiofer

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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!")

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sergiofer    0
sergiofer

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bruno1234    20
bruno1234

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).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sergiofer    0
sergiofer

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade