Foros del Web » Programación para mayores de 30 ;) » .NET »

BackgroundWorker, c#, alternativa?

Estas en el tema de BackgroundWorker, c#, alternativa? en el foro de .NET en Foros del Web. Hola, Estoy tratando de crear un programita que recorra un listado de ips, se conecte mediante ssh, interactue con el mismo y guarde los datos ...
  #1 (permalink)  
Antiguo 12/11/2012, 17:25
 
Fecha de Ingreso: octubre-2006
Mensajes: 3
Antigüedad: 18 años, 1 mes
Puntos: 1
BackgroundWorker, c#, alternativa?

Hola,


Estoy tratando de crear un programita que recorra un listado de ips, se conecte mediante ssh, interactue con el mismo y guarde los datos ke ncesito en uan db.


Despues de mucho luchar sin practicamente nada de conocimientos, logrea hacerlo en c# mediante consola, la ambicion despues me llevo a crearlo en windosform(guardando y trabajando con txt), y ahora en mi ultima version kiero poner un datagrid que se refresque mientras estoy corriendo un while que conecta al ssh correspondiente a la ip del momento.


En esta incurcion me di cuenta que mientras el while corre no puedo actualizar el datagrid porque el windowsfor queda tomado mientras el while trabaja.

Ahora estoy luchando si luchando! xD con backgroundworker, me es muy complejo pasar informacion de los string del dowork a un textbox.


Despues de la narracion no muy necesaria xD.

Saludos y muchas gracias de antemano


Alguien me podria indicar una alternativa a backgroundworker que me permita y rellenando un textbox desde el mismo while en cada pasada?, el WorkerReportsProgress de backgroundworker no me funciona muy bien y para que hablar del while dentro de backgroundworker (cada ves que soy iniciar se termina el proceso inmediatmaente xD.


Eso xD, una alternativa a backgroundworker que me permita interactiar en pleno proseso con las textbox. espero haberme explicado.
  #2 (permalink)  
Antiguo 13/11/2012, 07:08
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 8 meses
Puntos: 76
Respuesta: BackgroundWorker, c#, alternativa?

Hola,

Segun, lo que te entendi y lo que he usado NO debes tratar de deshacerte del BackgroundWorker, yo tambien lo e usado y para poder asignar el texto a tu TextBox dentro del While debes hacer mas o menos esto:

1. Creas un delegado
Código C#:
Ver original
  1. delegate void SetTextCallback(string text);

2. Creas el metodo que asigna el texto a tu TextBox

Código C#:
Ver original
  1. private void SetText(string mytexto)
  2.         {
  3.             // InvokeRequired required compares the thread ID of the
  4.             // calling thread to the thread ID of the creating thread.
  5.             // If these threads are different, it returns true.
  6.             if (this.InvokeRequired)
  7.             {
  8.                 SetTextCallback d = new SetTextCallback(SetText);
  9.                 this.Invoke(d, new object[] { mytexto});
  10.             }
  11.             else
  12.             {
  13.                 TuTextBox.Text =  mytexto;              
  14.             }            
  15.         }

3. En el evento ......_DoWork del BackGroundBroker que es donde me imagino que tenes el while debes hacer el llamado al metodo enviando el texto que quieres asignar.

Código C#:
Ver original
  1. SetText("127.0.0.1");

Pruebalo y me comentas como te fue.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #3 (permalink)  
Antiguo 13/11/2012, 11:50
Jnl
 
Fecha de Ingreso: octubre-2012
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: BackgroundWorker, c#, alternativa?

Si muy facil solo pega esto el iniciar el form.
Código vb:
Ver original
  1. CheckForIllegalCrossThreadCalls = false;
Y te deja modificar los controles del form
  #4 (permalink)  
Antiguo 13/11/2012, 12:39
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 8 meses
Puntos: 76
Respuesta: BackgroundWorker, c#, alternativa?



Esa forma no la conocia, la tendre en cuenta para problarla.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #5 (permalink)  
Antiguo 14/11/2012, 17:18
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Respuesta: BackgroundWorker, c#, alternativa?

La realidad es que utilizar CheckForIllegalCrossThreadCalls no es correcto usarlo (por eso está implicitamente en true) porque evita las comprobaciones que podría generar en algún momento que la aplicación se cuelgue u otro comportamiento que puede afectar a la aplicación

Personalmente utilizo como lo sugiere jhonwilliams

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 14/11/2012, 21:33
Jnl
 
Fecha de Ingreso: octubre-2012
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: BackgroundWorker, c#, alternativa?

Gracias RootK no tenia en cuenta que eso afectaba a la aplicación, talvez por eso mi aplicacion dejaba de funcionar en un cierto lapso de tiempo.
De todos modos tambien funciona xD!
  #7 (permalink)  
Antiguo 15/11/2012, 15:59
 
Fecha de Ingreso: octubre-2006
Mensajes: 3
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: BackgroundWorker, c#, alternativa?

Muchísimas gracias, ambos métodos me sirvieron, al final termine utilizando Thread ya que con backgroundworker el sharpssh de tamir nunca logre hacer vque logueara daba un problema de socket con un DLL secundario del mismo api, con Thread ese problema no lo tengo, y el método de Jnl funciona de la misma manera con Thread xD, pero por le tema estabilidad usare el método delegado que comenta jhonwilliams.

Muchísimas gracias a todos

Etiquetas: backgroundworker, textbox, windows
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:38.