Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: nevachana en 7 Septiembre 2015, 14:57 pm



Título: El form se congela cuando añado un row a mi datagriview.
Publicado por: nevachana en 7 Septiembre 2015, 14:57 pm
Hola   :) , tengo un problema,cuando añado varios rows a mi datagridview en poco tiempo,el form crashea.

1. Para acceder desde otras clases al form tengo una variable,a la cual le doy un valor cual el form carga.
Código
  1.   private void Form1_Load(object sender, EventArgs e)
  2.        {
  3.            Tools.doubleForm = this;
  4. }
2. Después,cada vez un cliente se conecta a mi servidor lo añado al grid.

Código
  1. Tools.updateUsersForm("Client", ip, Tools.GetCountry(ip), "ok", "windows");
  2.  
  3.  
  4.  public static void updateUsersForm(string name, string ip, string country, string status, string os)
  5.        {
  6.            doubleForm.editGrid(name, ip, country, status, os);        
  7.        }
  8.  
  9.  
  10.  
  11.  public void editGrid(string name, string ip, string country, string status, string os)
  12.        {
  13.             this.zombieGrid.Rows.Add(new string[]{name,ip,country,status,os});
  14.  
  15.        }

Será que doy muchas "vueltas"?
Gracias.


Título: Re: El form se congela cuando añado un row a mi datagriview.
Publicado por: kondrag_X1 en 7 Septiembre 2015, 21:02 pm
ami me pasó lo mismo y lo solucioné añadiendo un delegado cuando añado una fila.


Título: Re: El form se congela cuando añado un row a mi datagriview.
Publicado por: nevachana en 7 Septiembre 2015, 21:30 pm
ami me pasó lo mismo y lo solucioné añadiendo un delegado cuando añado una fila.

Nunca lo he usado,me darías un ejemplo?


Título: Re: El form se congela cuando añado un row a mi datagriview.
Publicado por: Eleкtro en 7 Septiembre 2015, 23:10 pm
En el título mencionas que se congela (se freezea) pero luego mencionas que se crashea (se finaliza anormálmente el proceso). ¿Puedes aclarar qué es lo que ocurre realmente de esas dos cosas?.

Que se congele el Form sería lo más normal, ya que si tienes el control en el thread de la UI y realizas una operación "intensiva", hasta que no termine lo que hagas en el control no puede seguir de forma regular el flujo de la UI.

Prueba a añadir los elementos de forma asíncrona en el mismo hilo, o añadir los elementos desde un hilo distinto, ambas metodologías deberían solucionar el problema del freezing.

Un ejemplo:
Código
  1. Imports System.Threading.Tasks
  2.  
  3. Task.Factory.StartNew(Sub()
  4.                          Me.zombieGrid.Añadir...)
  5.                      End Sub)

En C#
Código
  1. using System.Threading.Tasks;
  2.  
  3. Task.Factory.StartNew(() => { this.zombieGrid.Añadir...; })

Saludos


Título: Re: El form se congela cuando añado un row a mi datagriview.
Publicado por: nevachana en 9 Septiembre 2015, 14:37 pm
En el título mencionas que se congela (se freezea) pero luego mencionas que se crashea (se finaliza anormálmente el proceso). ¿Puedes aclarar qué es lo que ocurre realmente de esas dos cosas?.

Que se congele el Form sería lo más normal, ya que si tienes el control en el thread de la UI y realizas una operación "intensiva", hasta que no termine lo que hagas en el control no puede seguir de forma regular el flujo de la UI.

Prueba a añadir los elementos de forma asíncrona en el mismo hilo, o añadir los elementos desde un hilo distinto, ambas metodologías deberían solucionar el problema del freezing.

Un ejemplo:
Código
  1. Imports System.Threading.Tasks
  2.  
  3. Task.Factory.StartNew(Sub()
  4.                          Me.zombieGrid.Rows.Add(New String() {name, ip, country, status, os})
  5.                      End Sub)

En C#
Código
  1. using System.Threading.Tasks;
  2.  
  3. Task.Factory.StartNew(() => { this.zombieGrid.Rows.Add(new string[] {name,ip,country,status,os}); })

Saludos
Las dos cosas,si añado varios a la vez se congela un rato,pero si añado muchos( unos 30) crashea.
Gracias por el ejemplo ^^


Título: Re: El form se congela cuando añado un row a mi datagriview.
Publicado por: kondrag_X1 en 9 Septiembre 2015, 16:10 pm
nevachana cuando se te congela es cuando se llena el datagridview???