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

Quisiera saber si uso bien el BackGroundWorker

Estas en el tema de Quisiera saber si uso bien el BackGroundWorker en el foro de .NET en Foros del Web. Hola, estoy usando un backgroundworker en el que me muestra en una progressbar lo que tarda en cargar los datos, y quisiera saber si lo ...
  #1 (permalink)  
Antiguo 14/04/2009, 04:47
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Quisiera saber si uso bien el BackGroundWorker

Hola, estoy usando un backgroundworker en el que me muestra en una progressbar lo que tarda en cargar los datos, y quisiera saber si lo estoy haciendo bien

Private Sub frmDatosUsuarios_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
BackgroundWorker1.WorkerReportsProgress = True
BackgroundWorker1.RunWorkerAsync()
End sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'Creamos un bucle y llamamos al método ReportProgress para que
'genere el evento ProgressChanged
For Contador As Integer = 1 To 1000
BackgroundWorker1.ReportProgress(Contador)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
'Modificamos la propiedad Value del ProgressBar
ProgressBar1.Value = e.ProgressPercentage / 10
me.label1.Text= ProgressBar1.Value & " % Completado"
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
'Llamo a que carge los datos
Datos()
End Sub


Public Sub Datos()
oConexion = New MySqlConnection
oConexion.ConnectionString = cadena_conexion
'crear adaptador
Me.oDataAdapter = New MySqlDataAdapter("Select * from usuarios order by apellidos,nombre desc", oConexion)
'Crear dataset
Me.oDataSet = New DataSet
oConexion.Open()
'llenar con el adaptador el dataset
Me.oDataAdapter.Fill(oDataSet, "gestioncv")
oConexion.Close()
'Cargo los datos
End Sub
  #2 (permalink)  
Antiguo 14/04/2009, 07:57
 
Fecha de Ingreso: febrero-2008
Mensajes: 9
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

Esto depronto te sirva
onglasses.net/default.aspx?articuloid=88
  #3 (permalink)  
Antiguo 14/04/2009, 08:09
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

No me sirve ya que esta hecho en C++

Yo tengo vb.net
  #4 (permalink)  
Antiguo 14/04/2009, 08:31
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Quisiera saber si uso bien el BackGroundWorker

pues el problema es q no invocas a tu proceso q tarda o se cuelga dentro del metodo DoWork si lo invocas ahi y usas no se una variable global q cambie cuando se completa el trabajo y usas un while (variable=true) report progress muy pequeno puede funcionar.

pero es un problema de logica y donde colocas el codigo no poner un for de 0 a 100 porq eso solo se muestra y el proceso puede seguir colgado
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 14/04/2009, 08:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

o se que tendria que ser asi

Private Sub frmDatosUsuarios_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
BackgroundWorker1.WorkerReportsProgress = True
BackgroundWorker1.RunWorkerAsync()
End sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'Creamos un bucle y llamamos al método ReportProgress para que
'genere el evento ProgressChanged
Datos()
For Contador As Integer = 1 To 1000
BackgroundWorker1.ReportProgress(Contador)
Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
'Modificamos la propiedad Value del ProgressBar
ProgressBar1.Value = e.ProgressPercentage / 10
me.label1.Text= ProgressBar1.Value & " % Completado"
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
'Llamo a que carge los datos

End Sub


Public Sub Datos()
oConexion = New MySqlConnection
oConexion.ConnectionString = cadena_conexion
'crear adaptador
Me.oDataAdapter = New MySqlDataAdapter("Select * from usuarios order by apellidos,nombre desc", oConexion)
'Crear dataset
Me.oDataSet = New DataSet
oConexion.Open()
'llenar con el adaptador el dataset
Me.oDataAdapter.Fill(oDataSet, "gestioncv")
oConexion.Close()
'Cargo los datos
End Sub


Me sale un error:

Excepción del tipo 'System.InvalidOperationException' en
System.Windows.Forms.dll
{"Se produjo una excepción en el destino de la invocación."}

Operación no valida a traves de subprocesos: Se tuvo acceso al control tbPanel desde un subproceso distinto a aquel en el que lo creo
  #6 (permalink)  
Antiguo 14/04/2009, 09:12
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Quisiera saber si uso bien el BackGroundWorker

bueno eso ya es un error distinto que no es mas que quieres afectar el UI desde un hilo diferente al que creo el control tbPanel , necesitariamos ver en que linea y desde donde se llama esa linea.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 14/04/2009, 09:24
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

EL error salta en

Private Sub BackgroundWorker1_ProgressChanged
  #8 (permalink)  
Antiguo 14/04/2009, 09:26
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

perdon es el dowork donde salta el error al llamar a Datos

Cita:
Iniciado por Peterpay Ver Mensaje
bueno eso ya es un error distinto que no es mas que quieres afectar el UI desde un hilo diferente al que creo el control tbPanel , necesitariamos ver en que linea y desde donde se llama esa linea.
  #9 (permalink)  
Antiguo 14/04/2009, 09:47
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Quisiera saber si uso bien el BackGroundWorker

el codigo completo para ver por donde va fallando

PD: te diran que pongas una atributo para omiti ese error pero no garantiza errores futuros asi que lo mejor es usar invoke para este tipo de casos, pero hay que ver el codigo sr.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #10 (permalink)  
Antiguo 14/04/2009, 09:51
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

Donde falla es donde esta en cursiva

Public Sub Datos()
If operacion = "BUSQUEDA MULTIPLE" Then
Else
Try
me.tbPanel.SelectTab(0)
'crear conexion
oConexion = New MySqlConnection
oConexion.ConnectionString = cadena_conexion
'crear adaptador
Me.oDataAdapter = New MySqlDataAdapter("Select * from datosusuarios order by apellidos,nombre desc", oConexion)
'Crear dataset
Me.oDataSet = New DataSet
oConexion.Open()
'llenar con el adaptador el dataset
Me.oDataAdapter.Fill(oDataSet, "datosusuarios")
oConexion.Close()
'establecer el indicador del registro
'a mostrar de la tabla
Me.iPosicionActual = 0
Me.CargarDatos()
CargarSectores()
CargarPaises()
CargarCOU()
CargarAreaFP1()
CargarAreaFP2()
CargarAreaDiplo()
CargarAreaLicen()
CargarIdiomas()
CargarInformatica()
Catch ex As Exception
MsgBox("Se ha(n) producido errore(s)" & ex.Message, MsgBoxStyle.Critical, "Error(es)")
End Try
End If
End Sub
  #11 (permalink)  
Antiguo 14/04/2009, 09:56
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Quisiera saber si uso bien el BackGroundWorker

me.tbPanel.SelectTab(0)

hay que moverlo de ahi y usar un delegado para actualizarlo

usando el me.tbPanel.Invoke(delegadoqueactualizatutbPanel)
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #12 (permalink)  
Antiguo 14/04/2009, 10:04
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

no entiendo lo de delegadoqueactualizatutbPanel
  #13 (permalink)  
Antiguo 14/04/2009, 10:06
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Quisiera saber si uso bien el BackGroundWorker

investiga sobre delegados y el metodo invoke con eso le daras una solucion correcta a tu problematica
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #14 (permalink)  
Antiguo 14/04/2009, 10:17
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: Quisiera saber si uso bien el BackGroundWorker

Cuando lo soluciones lo comentas para asi aprender yo tambien de ustedes
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #15 (permalink)  
Antiguo 14/04/2009, 11:01
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

Me parece que voy intentar hacerlo de otra forma

Me estoy volviendo loco buscando en google como hacerlo, y no aparece o aparece todo para C#
  #16 (permalink)  
Antiguo 14/04/2009, 11:17
 
Fecha de Ingreso: febrero-2007
Mensajes: 165
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Quisiera saber si uso bien el BackGroundWorker

Bingo ya he encontrado la formula:

Private Delegate Sub MostrarTab_Delegate(ByVal tb As TabControl)
Public Sub MostrarTab(ByVal Tab1 As TabControl)
If Me.InvokeRequired = True Then
Me.Invoke(New MostrarTab_Delegate(AddressOf MostrarTab), Tab1)
Else
Me.tbPanel.SelectTab(0)
End If
End Sub

¿Hay que hacer todo esto por cada control?
  #17 (permalink)  
Antiguo 14/04/2009, 11:20
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Quisiera saber si uso bien el BackGroundWorker

pues no para todo lo ideal seria q tus metodos que tuvieran que actulizar ui lo hicieran en la capa de presentacion y no en la de negocio y datos que es como lo tienes. es solo practicidad al codificar.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
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




La zona horaria es GMT -6. Ahora son las 01:34.