Valor de texto de etiquetas durante bucle no se actualiza

21/07/2004 - 12:23 por Lope | Informe spam
Buenas. Esta duda parece una tontería, pero no le encuentro el fallo. Es
un trozo de código que funciona correctamente salvo en la presentación
en pantalla.

El bucle hace unos calculos por cada operario y los almacena en la
tabla. En pantalla aparece la progressbar correctamente, pero el
contenido de lbloperario, lblcanastos,... no se actualiza conforme
cambia de operario, si no sólo al final de la ultima iteración del bucle
con el nombre y los datos del ultimo empleado. ¿A alguien se le ocurre
por qué?

+++++++
For intCont = 0 To intTotalOperarios


objFilaOperario = objTablaOperarios.Rows(intCont)

lblOperario.Text = Trim(objFilaOperario.Item("Nombre")) & " " &
Trim(objFilaOperario.Item("Apellidos"))

intCanastos = CalculaCanastos(objFilaOperario.Item("Id"), FInicio,
Final)
lblCanastos.Text = intCanastos

intKMs = CalculaKM(objFilaOperario.Item("Id"), FInicio, FFinal)
lblKMs.Text = intKMs

dblExtras = CalculaExtras(objFilaOperario.Item("Id"), FInicio, FFinal)

GuardaLineaOperario(Nombre, objFilaOperario.Item("Id"), intCanastos,
intKMs, dblExtras)

ProgressBar1.PerformStep()

Next intCont
+++++++
 

Leer las respuestas

#1 Misael Monterroca
21/07/2004 - 16:23 | Informe spam
Utiliza Threads, ya que el proceso se esta quedando "bloqueado" en lo que no
termina tu bucle, es por esto que el refresco de la pantalla no es visible
(aunque lo esta haciendo)

te dejo un ejemplo basico tomado del msdn.

haciendolo así, el bucle correra en un proceso diferente y por ende la
pantalla se refrecara con la información.

Imports System
Imports System.Threading

Public Class ServerClass

' The method that will be called when the thread is started.
Public Sub InstanceMethod()
Console.WriteLine("ServerClass.InstanceMethod is running on another
thread.")
Thread.Sleep(3000) ' Pause for a moment to provide a delay to make
threads more apparent.
Console.WriteLine("The instance method called by the worker thread has
ended.")
End Sub 'InstanceMethod

Public Shared Sub StaticMethod()
Console.WriteLine("ServerClass.StaticMethod is running on another
thread.")
Thread.Sleep(5000) ' Pause for a moment to provide a delay to make
threads more apparent.
Console.WriteLine("The static method called by the worker thread has
ended.")
End Sub 'StaticMethod
End Class 'ServerClass

Public Class Simple

Public Shared Sub Main()
Console.WriteLine("Thread Simple Sample")

Dim serverObject As New ServerClass()

' Create the thread object, passing in the
' serverObject.InstanceMethod method using a
' ThreadStart delegate.
Dim InstanceCaller As New Thread(New ThreadStart(AddressOf
serverObject.InstanceMethod))

' Start the thread.
InstanceCaller.Start()

Console.WriteLine("The Main() thread calls this after starting the new
InstanceCaller thread.")

' Create the thread object, passing in the serverObject.StaticMethod
' method using a ThreadStart delegate.
Dim StaticCaller As New Thread(New ThreadStart(AddressOf
ServerClass.StaticMethod))

' Start the thread.
StaticCaller.Start()

Console.WriteLine("The Main() thread calls this after starting the new
StaticCaller threads.")

End Sub 'Main
End Class 'Simple


Saludos!
http://cacho.zapto.org/blog




"Lope" wrote in message
news:
Buenas. Esta duda parece una tontería, pero no le encuentro el fallo. Es
un trozo de código que funciona correctamente salvo en la presentación
en pantalla.

El bucle hace unos calculos por cada operario y los almacena en la
tabla. En pantalla aparece la progressbar correctamente, pero el
contenido de lbloperario, lblcanastos,... no se actualiza conforme
cambia de operario, si no sólo al final de la ultima iteración del bucle
con el nombre y los datos del ultimo empleado. ¿A alguien se le ocurre
por qué?

+++++++
For intCont = 0 To intTotalOperarios


objFilaOperario = objTablaOperarios.Rows(intCont)

lblOperario.Text = Trim(objFilaOperario.Item("Nombre")) & " " &
Trim(objFilaOperario.Item("Apellidos"))

intCanastos = CalculaCanastos(objFilaOperario.Item("Id"), FInicio,
Final)
lblCanastos.Text = intCanastos

intKMs = CalculaKM(objFilaOperario.Item("Id"), FInicio, FFinal)
lblKMs.Text = intKMs

dblExtras = CalculaExtras(objFilaOperario.Item("Id"), FInicio, FFinal)

GuardaLineaOperario(Nombre, objFilaOperario.Item("Id"), intCanastos,
intKMs, dblExtras)

ProgressBar1.PerformStep()

Next intCont
+++++++

Preguntas similares