[THREADS] Arrojo el teclado y me rindo XD

30/12/2005 - 18:06 por Ch0rY | Informe spam
Pos eso q no soy capaz d entenderlos, y x lo tando d usarlos.

Esto es lo q estoy haciendo con VB.Net 2005

Es un programilla para descargarme unos ficheros de un servidor
Tengo un ListView con 3 Columnas y un boton de descargar (btn_Descargar)
Fichero, Ruta del Fichero y Comentarios

Imports System.IO
Imports System.net
Imports System.Text
Imports System.Threading

Public Class Form1

Dim Fichero As String
Dim Ruta as string
dim RutaLocal as String = "c:\descarga\"
Dim lwItem As ListViewItem

Dim myThreadDelegate As New ThreadStart(AddressOf Descargar2)
Dim myThread As New Thread(myThreadDelegate)


Private Sub btn_Descargar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_Descargar.Click
If lst_Ficheros.CheckedItems.Count > 0 Then
myThread = New Thread(myThreadDelegate)
myThread.Start()
End If
End Sub

Private Sub Descargar()
For Each lwItem In Me.lst_Ficheros.CheckedItems
lwItem.EnsureVisible()
Fichero = lwItem.SubItems(0).Text
Ruta = lwItem.SubItems(1).Text
Try
Dim req As HttpWebRequest
Dim Pilla As String = "http://" & Ruta & Fichero
Dim u As New Uri(Pilla)
req = HttpWebRequest.Create(u)
req.Method = "GET"
Try
If Dir(RutaLocal & Fichero) = "" Then
Dim ar As IAsyncResult = req.BeginGetResponse(AddressOf Descargar2,
req)
lwItem.BackColor = Color.LightGreen
Descargando = True
Do
If ar.IsCompleted Then
Exit Do
End If
Loop
End If
Catch ex As Exception
End Try
Catch ex As Exception
End Try
Do While Descargando
Loop
lwItem.BackColor = Color.White
If Excepcion Then
lwItem.ForeColor = Color.Red
Else
lwItem.ForeColor = Color.Green
End If
Excepcion = False
lwItem.Checked = False
Next
End Sub

Private Sub Descargar2(ByVal ar As IAsyncResult)
Dim rsp As WebResponse
Try
rsp = CType(ar.AsyncState, HttpWebRequest).EndGetResponse(ar)
Dim st As Stream = rsp.GetResponseStream()
Dim cbRead As Int32 = 0
Dim wrt As FileStream = New FileStream(RutaLocal & Fichero & "_",
FileMode.Create)
Dim buffer(1024) As Byte
Do
cbRead = st.Read(buffer, 0, 1024)
If cbRead = 0 Then Exit Do
wrt.Write(buffer, 0, cbRead)
Loop
wrt.Close()
Rename(RutaLocal & Fichero & "_", RutaLocal & Fichero)
rsp.Close()
Catch ex As Exception
Excepcion = True
End Try
Descargando = False
End Sub

end class

Cuado pulso el boton de descargar (btn_Descargar)

Me lanza este error:
Cross-thread operation not valid: Control 'lstFichero' accessed from a
thread other than the thread it was created on.

He impreso ¿ o imprimido ? el ejemplo, pero no me entero de ná, lo siento q
lo voy ha hacer si soy asi de negao

Lo q quiero es hacer una especie de gestor de descargas, que permita
descargar varios ficheros a la vez, pero si no soy capaz de hacer q
descarga uno, ya me direis.

Si el codigo del evento de btn_Descargar lo cambio por Call Descargar,
descarga perfectamente, pero no puedo seguir haciendo nada mas con el
programa.


Necesito un guia, guru, o alguien q me ilumine.

Ch0rY
 

Leer las respuestas

#1 Ch0rY
01/01/2006 - 14:59 | Informe spam
Bueno parece q esto va mejor
el problema q tenia

Cross-thread operation not valid: Control 'lstFichero' accessed from a
thread other than the thread it was created on.



ya lo he solucionao gracias a Octavio que aconsejo David q visitara esta
web http://es.gotdotnet.com/QuickStart/default.aspx, y hay he encontrao
una explicacion "para torpes", q me ha venido fenomenal.

Pero ahora tengo una duda, ¿ como hago para pasar parametros ?

Ahora tengo esto, para que actualice una barra de progreso segun se
descarga

Dim pro As New MethodInvoker(AddressOf Prog)

...
Me.Invoke(pro)
...

Private Sub Prog()
With EstadoProgreso
.Maximum = BarraMaximo
.Value = BarraVale
End With


BarraMaximo y BarraVale son variables publicas
¿pero como puedo usar esto
Private Sub Prog(byval Vale as integer, byval Maximo as integer) ?


Otra cosa

Estoy usando un control webbrowser llamado weboculto, para comprobar si
existe el archivo o no, de esta forma

webOculto.Navigate(New Uri(RutaArchivo))

como hago para q no salte el gestor de descargas, ni el cuadro de dialogo
guardar como, para poder descargarlo desde mi aplicacion, y no tener que
estar cancelando cadavez q va a descargar un archivo?


Muchas gracias

Preguntas similares