none
¿Como evitar que el formulario tarde en cargar en c#? RRS feed

  • Pregunta

  • Buenos días, tengo una duda mi formulario tarde mucho en carga, en load tengo algunas funciones que cargan combos y datagridview con información de la base de datos, he leido sobre el tema y habla sobre dos opciones:

    1. Programación asincrónica con Async y Await

    2. BackgroundWorker

    Cual de las dos es recomendable trabajar? estoy utilizando visual studio 2017

    martes, 13 de noviembre de 2018 15:29

Respuestas

Todas las respuestas

  • Hola,

    Lo mejor que podes hacer es ver que esta pasando en esas funciones, cargar los combos y el datagrid. Tal vez el problema pase por obtener la informacion de la base de datos.


    Victor Koch

    martes, 13 de noviembre de 2018 15:34
  • Hice una prueba y comentando todas las funciones para ver si cargaba lento y sigue igual, sin hacer un llamado a la base de datos, es decir, al visualizar el formulario para cargarse los controles tarda, en el formulario tengo:

    6 textbox

    4 combobox

    2 datepicker 

    9 botones

    por eso puede haber un problema al cargarse? es que me gustaria arreglar eso porque no da buena imagen de rendimiento al usuario final 

    martes, 13 de noviembre de 2018 15:44
  • Buenas,

    La verdad es que depende un poco de que estés cargando, si vas a cargar datos de una DB, prácticamente todos los conectores tienen soporte asíncrono, así que usarlo y utilizar await puede ser la opción más sencilla de gestionar, ya que el proceso es "lineal". Por contra, el formulario no se va a mostrar hasta que el evento load completo se ejecute, quizás un backgroundworker pueda solucionarte mejor si lo que quieres es que el formulario cargue rápido independientemente de que los datos de los combo estén o no.

    Ten en cuenta si usas esto ultimo, que el evento de trabajo del backgroundworker se ejecuta en un hilo aparte, eso quiere decir que si accedes a controles, tienes que hacerlo de forma segura mediante Invoke u obtendrás  IllegalCrossThreadCalls

    Si tienes dudas comentanos


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    Mi Blog


    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    martes, 13 de noviembre de 2018 15:57
  • hola

    ojo ninguna de estas opciones va hacer que el form cargue mas rapido, solo evitaras que este se quede freezado y puedas mostrar al usuario algun progress o loading indicando que espere a que carguen los datos, quedando mas amigable

    ambas opciones son validas por ejemplo el BackgroundWorker tiene un evento que permite indicar progreso

    BackgroundWorker.ReportProgress Method

    pero ten en cuenta que desde algo asincrono no vas a poder acceder a los controles, la idea es que el asincrono acceda a los datos y la vuelta con la info sea asignada a controles de la UI, no podras asignar dentro de un thread

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de noviembre de 2018 16:21
  • Me di cuenta, estuve intentando y tenia que crearse primero los controles, que me recomiendan para evitar que tarden mucho en cargar? es que se puede ver perfectamente como se van "pintando" los componentes hasta que termina y lógicamente es muy molesto para el usuario.
    martes, 13 de noviembre de 2018 16:32
  • hola

    >>que me recomiendan para evitar que tarden mucho en cargar?

    no hay milagros, solo optimizar las queries y quizas no cargar tablas completas sino filtrar y paginar los datos que vayas a mostrar al usuario

    si tienes tablas grandes no cargues todo, pagina y proporciona filtros al usuario

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de noviembre de 2018 16:50
  • Creo que lo que dices es que no quieres que valla pintando o haciendo el render al mismo tiempo que se va llenando, para esto en un si estas usando datasource

    existe un evento 

    DataSourceChanged 

    ese evento hará que datagrid se pinte hasta que datasource este lleno.

    martes, 13 de noviembre de 2018 17:13
  • Si se puede evitar ese parpadeo que se visualiza al cargar el formulario, en este foro lo comentan:

    https://stackoverflow.com/questions/2612487/how-to-fix-the-flickering-in-user-controls/2613272#2613272

    martes, 13 de noviembre de 2018 19:02