Progressbar e thread

PJ

Power Member
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 :

Código:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][SIZE=2] progbar2 [/SIZE][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][SIZE=2] ProgressBar[/SIZE]
[SIZE=2]progbar2.Style = ProgressBarStyle.Marquee[/SIZE]
[SIZE=2]progbar2.Show()[/SIZE]
[SIZE=2]_StartTime = Now[/SIZE]
[SIZE=2][COLOR=#008000]'progbar2.Lbl_ActualValue.Text = "00:00"[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][SIZE=2] span [/SIZE][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][SIZE=2] TimeSpan[/SIZE]
[SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][SIZE=2] spanAux [/SIZE][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][SIZE=2] num [/SIZE][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][SIZE=2] = 0[/SIZE]
[SIZE=2][COLOR=#0000ff]Do[/COLOR][/SIZE]
[SIZE=2]Thread.Sleep(100)[/SIZE]
[SIZE=2]_EndTime = Now[/SIZE]
[SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][SIZE=2] num = 10 [/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2] span = _EndTime.Subtract(_StartTime)[/SIZE]
[SIZE=2][COLOR=#0000ff] If[/COLOR][/SIZE][SIZE=2] span.ToString.Length > 8 [/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2]  spanAux = span.ToString.Remove(8)[/SIZE]
[SIZE=2][COLOR=#0000ff] End[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff] If[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][SIZE=2] spanAux [/SIZE][SIZE=2][COLOR=#0000ff]Is[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Nothing[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2][COLOR=#008000] 'Aqui actualiza a label com o tempo[/COLOR][/SIZE]
[SIZE=2][COLOR=#008000] 'progbar.Lbl_ActualValue.Text = spanAux.Remove(0, 3)[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff] End[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[SIZE=2] num = 0[/SIZE]
[SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
 
 
[SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][SIZE=2] progbar2.Text <> _texto [/SIZE][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[SIZE=2] progbar2.Text = _texto[/SIZE]
[SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
 
[SIZE=2]num += 1[/SIZE]
[SIZE=2][COLOR=#0000ff]Loop[/COLOR][/SIZE]
[/COLOR][/SIZE]

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 :

Código:
[SIZE=2]_Th1 = [/SIZE][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][SIZE=2] Thread([/SIZE][SIZE=2][COLOR=#0000ff]AddressOf[/COLOR][/SIZE][SIZE=2] StartThread)[/SIZE]
[SIZE=2][COLOR=#008000]'_Th1.Priority = ThreadPriority.Highest[/COLOR][/SIZE]
[SIZE=2]_Th1.IsBackground = [/SIZE][SIZE=2][COLOR=#0000ff]True[/COLOR][/SIZE]
[SIZE=2]_Th1.Start()[/SIZE]

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

Cumps
 
so trabalhei com progressbar em c++/cli, c# e delphi, essa progressbar nao tem position? Escala? do que vai depender a posição actual da progressbar?
 
so trabalhei com progressbar em c++/cli, c# e delphi, essa progressbar nao tem position? Escala? do que vai depender a posição actual da progressbar?

Esta progress bar é do estilo marquee, pelo que ela continua a rodar até eu enviar um comando de abort da thread.

Apenas serve para indicar ao utilizador o que está a acontecer, o form associado a essa progress bar num minuto pode dizer "A processar dados..." e no outro "A gravar dados...", coisas assim do género.
 
If num = 10 Then

Nesta comparação não estas a comparar tas a atribuir, poderá ser isso?

Brigado pela explicação.

ps: nao pesco nada de visual b

 
Back
Topo