Visual Basic.NET - Mostrar formulario antes de cargar datos

 
Vista:
sin imagen de perfil
Val: 131
Ha aumentado su posición en 19 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Jaime (48 intervenciones) el 06/12/2020 08:14:44
Buenos días gente, les comento mi problema, tengo un formulario tiene bastantes textbox, los cuales se rellenan a base de consultas, lo que implica un tiempo de carga de cerca de 30 segundos. Lo que pretendo es que primero me muestre el formulario y luego me realice las consultas y llenado de datos en los textbox. He probado con me.show en el load antes de llamar a los procedimientos de carga, pero no funciona, también he probado a pasar las llamadas de los procedimientos desde el evento Shown, pero tampoco, el resultado es que se queda el formulario medio cargado visualmente hasta que acaba con los procedimientos de consultas y llenados de textbox.
Esta es la imagen de pantalla durante ese tiempo
pantallazo-para-borrar

Había pensado que igual el camino correcto para realizar esto y que mi form se muestre instantáneamente sería realizar las consultas y llenado de campos a través de threads, pero no tengo acceso a los textbox ya que son del hilo principal y desconozco la técnica para devolver esos valores de un hilo al otro. Alguien me puede orientar un poco a como aligerar la carga del form?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.280
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Phil Rob (989 intervenciones) el 06/12/2020 17:07:00
Hola,

No sé este que significas con “threads”. Es solamente porqué trabajas con 2 Form?
En este caso, este es fácil de llenar todos TextBox del Form2 ante lo mostrar (Form.Show).
Si las consultas están ejecutadas en Form2, no puedes hacer las en el procedimiento Load o Actived del Form, o solamente en ultima instrucción del procedimiento Load.
Consultas escritas en Form2 pueden ser llamadas de Form1 si están FRIEND ( y no Private) :

Friend Sub UnProcedimiento()

Tras este, en Form1, puedes llamar Form2.UnProcedimiento() y enviar el resultado en los TextBox con Form2.TextBox1.Text= …

Quizá peudes enviar codigo ...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 131
Ha aumentado su posición en 19 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Jaime (48 intervenciones) el 06/12/2020 21:00:57
El problema no es pasar datos de un formulario a otro ni llamar un procedimiento de otro form, el problema es que al instanciar un formulario el cuál en el evento load manda a llamar a otros procedimientos del mismo form que realizan muchas consultas a una BD para llenar los textbox y hace que el formulario no acabe de dibujarse hasta que no acaben los procedimientos.
Mi intención es que visualmente se pinte todo el form y que después se rellenen los textbox, y así evitar que pase lo de la foto.

Con los threads (hilos) pueden ir en paralelo pero no sé acceder a los textbox desde otro hilo que no sea el principal (que es el encargado de abrir el form con los textbox). De todas maneras no sé si por ahí van los tiros de lo que quiero conseguir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.280
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Phil Rob (989 intervenciones) el 06/12/2020 21:18:55
Los eventos estan Load y tras Activated.
Cuando Load es activado, no es visible el Form. Lo es visible mas tarde, ante el evento Activated.
Por lo tanto, cuando Activated es activado, todo el Form es visible.
Quizá que debes llamar las consultas del BD para llenar los TextBox en procedimiento Form_Activaded.

Lo siento no puedo te ayudar mas ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 131
Ha aumentado su posición en 19 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Jaime (48 intervenciones) el 06/12/2020 23:33:23
En el evento Activated me pasa lo mismo, no se acaba de dibujar el form hasta que no acaba los procedimientos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.280
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Phil Rob (989 intervenciones) el 07/12/2020 07:43:36
Hola,

" ... el evento Activated me pasa lo mismo ..." : No es posible que el trabajo llamado tras la visualización impide esta visualización.

Pienso que el problema es otro ..., que no es las consultas, o que la consultas están llamadas ante el llamada del Form, ...

Que tenga un buen día ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 131
Ha aumentado su posición en 19 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Jaime (48 intervenciones) el 07/12/2020 09:07:27
Te muestro el código para que veas que no hay nada raro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Sub frm_Informacion_Obra_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
 
End Sub
 
Private Sub frm_Informacion_Empresa_Activated(sender As Object, e As EventArgs) Handles Me.Activated
 
    Call Cargar_Tabs()
    Call Cargar_Costes_Totales()
    Call Cargar_Costes_Mat()
    Call Cargar_Costes_Operarios()
    Call Cargar_Costes_Impuestos()
    Call Cargar_Costes_Vehiculos()
    Call Cargar_Costes_Bancarios()
    Call Cargar_Costes_Inmuebles()
    Call Cargar_Costes_Seguros()
    Call Cargar_Costes_Otros()
 
    Call Cargar_Facturacion_Total()
    Call Cargar_Facturacion1()
    Call Cargar_Facturacion2()
    Call Cargar_Facturacion3()
    Call Cargar_Facturacion4()
    Call Cargar_Otros_Ingresos()
 
    Call Cargar_Pagado_Iva_Trimestral()
    Call Cargar_Facturado_Iva_Trimestral()
    Call Cargar_Resultado_Iva_Trimestral()
    Call Cargar_Resultado_Total_Iva()
 
    'call Cargar_Etiquetas()
    'Call Cargar_Grafico()
    Call Cargar_Mascaras()
 
End Sub

Pues así es el comportamiento de este form, he dejado vacío el Load y hago la llamada a los procedimientos en ele evento siguiente de Activated, en el Shown y tampoco.

He probado a meter todas las llamadas a los métodos en un método público, instanciar el formulario en no Modal y llamar al método público despues del Form.show, y tampoco.

Pensé que pudiera ser por estar corriendo en Debug, compilé y ejecuté en Release y tampoco. Ya no se me ocurre nada más y mis conocimientos no llegan a otra solución.
A nadie se le congela la pantalla al instanciar un form con carga pesada? Hay alguna técnica para evitar esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.280
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Phil Rob (989 intervenciones) el 07/12/2020 09:45:38
Hola,

Veo mejor ..., pero no me explica realmente el problema.

Propongo de eliminar las instrucciones CALL. En principio, cambiara nada (es un antigua instrucción que no utilizar en VB.Net).
Y propongo que mueva las llamadas en un procedimiento CargarInformciones() y la llamar dondé frm_Informacion_Obra_Load, o si no funciona, a llamar dondé frm_Informacion_Empresa_Activated.

Después :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub frm_Informacion_Obra_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 CargarInformaciones()
End Sub
 
Private Sub frm_Informacion_Empresa_Activated(sender As Object, e As EventArgs) Handles Me.Activated
'
End Sub
 
Private Sub CargarInformaciones()
         Cargar_Tabs()
         Cargar_Costes_Totales()
         Cargar_Costes_Mat()
         Cargar_Costes_Operarios()
         Cargar_Costes_Impuestos()
         Cargar_Costes_Vehiculos()
         Cargar_Costes_Bancarios()
         Cargar_Costes_Inmuebles()
         Cargar_Costes_Seguros()
         Cargar_Costes_Otros()
 
         Cargar_Facturacion_Total()
         Cargar_Facturacion1()
         Cargar_Facturacion2()
         Cargar_Facturacion3()
         Cargar_Facturacion4()
         Cargar_Otros_Ingresos()
 
         Cargar_Pagado_Iva_Trimestral()
         Cargar_Facturado_Iva_Trimestral()
         Cargar_Resultado_Iva_Trimestral()
         Cargar_Resultado_Total_Iva()
 
        ' Cargar_Etiquetas()
        ' Cargar_Grafico()
         Cargar_Mascaras()
End Sub

Después todo este, si no funciona, poner un botón en el Form y llamar CargarInformaciones() cuando Click este botón. Aquí, debe tener un buena pantalla, si no el problema no es en las consultas.

Espero que puedes saber donde viene el problema ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 131
Ha aumentado su posición en 19 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Jaime (48 intervenciones) el 07/12/2020 10:22:13
Si lo hago a través de un botón se obtiene el resultado deseado, soy consciente, pero la idea era que el usuario no tuviese que hacer nada. Si comento las llamadas a los procedimientos, la carga visual va como un tiro. Lo que quiere decir que los procedimientos llamados desde Activated o Shown interfieren en el pintado del form si o si.
Me gusta usar Call para métodos que no devuelven nada, manias mias, aunque sé que no es necesario y no creo que derive ahí el problema.
Que encierre las llamadas en otro procedimiento no soluciona nada, seguiré investigando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.280
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Phil Rob (989 intervenciones) el 07/12/2020 10:53:03
El botón, ería solamente para testar.

Si funciona con el bóton, propongo de poner un Timer qui espera que la pantalla se termina, después llama las consultas.

1
2
3
4
5
6
7
8
9
10
11
12
Dim WithEvents MiTimer As New Timer
 
Private Sub frm_Informacion_Obra_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    MiTimer.Interval = 2000  ' 2000 millisec, = 2 segundos
    MiTimer.Start
End Sub
 
Private Sub MiTimer_Tick(sender As Object, e As EventArgs) Handles MiTimer.Tick
   MiTimer.Stop
   CargarInformaciones()
   MiTimer.Dispose()
End Sub

Dice me como funciona ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 131
Ha aumentado su posición en 19 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Jaime (48 intervenciones) el 07/12/2020 11:48:11
Así siiiiiii, eurekaaa.
Muchas gracias por tu paciencia y sabiduría,
Los procedimientos son llamados por un evento del timer, y el timer le da tiempo a la carga visual, no te acostarás sin saber una cosa más
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.280
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Mostrar formulario antes de cargar datos

Publicado por Phil Rob (989 intervenciones) el 07/12/2020 12:36:15
Muchas gracias para el "feedback".

Buena tarde ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar