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 :
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 :
Alguém me poderá dar uma ajuda de forma a isto não acontecer.
Cumps
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