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

PFCJ

[Dúvida] Thread e Progress bar

3 mensagens neste tópico

Boas, sou novo neste fórum e agradeço desde já toda a ajuda que me derem.

Bom é o seguinte :

Tenho alguns cálculos que demoram bastante tempo a ser executados, e alguns deles eu não tenho acesso pois estão em dlls mas desconfio que tb sejam executados em threads.

Fiz uma classe que instância uma nova thread de uma função que inicia e actualiza a progress bar.

Basicamente é isto :

 
Dim progbar2 As New ProgressBar
progbar2.Style = ProgressBarStyle.Marquee
progbar2.Show()
_StartTime = Now
        
Dim span As TimeSpan
Dim spanAux As String
Dim num As Integer = 0
Do
  Thread.Sleep(100)
  _EndTime = Now
  If num = 10 Then
    span = _EndTime.Subtract(_StartTime)
    If span.ToString.Length > 8 Then
       spanAux = span.ToString.Remove(8)
    End If
    If Not spanAux Is Nothing Then
      'Aqui actualiza a label com o tempo
      'progbar.Lbl_ActualValue.Text = spanAux.Remove(0, 3)
    End If
    num = 0
  End If
  If progbar2.Text <> _texto Then
    progbar2.Text = _texto
  End If
           
  num += 1
Loop

Assim consigo enviar mensagens ao utilizador através da progressbar utilizando uma property texto que é shared.

O problema é que a progress bar fica parada após alguns 5 ou 6 segundos. A thread continua a correr pois se colocar lá um break point quando ela está parada ele detecta o breakpoint.

Instânciei a thread desta forma :

_Th1 = New Thread(AddressOf StartThread)
_Th1.IsBackground = True
_Th1.Start()

Alguém me poderá dar uma ajuda de forma a isto não acontecer.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

No final do loop (antes de incrementares a variável num) coloca um Application.DoEvents() para a aplicação actualizar a progress bar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Eu teria usado a classe BackgroundWorker que tem os seguintes events: DoWork, ProgressChanged e RunWorkerCompleted.

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