"Operación no válida a través de subprocesos: Se tuvo acceso al control
'txtLastTAG1' desde un subproceso distinto a aquel en que lo creó." String
Os cuento:
Tengo un proyecto con el componente SerialPort en vs2005
En el evento "DataReceived" con un ".ReadLine" asigno el string leido a
una variable, llamo a otro SUB (para gestionar los datos) y esta var. la uso
como parametro en esta llamada. Y cuando intento asignar una variable al un
textBox aparece la citada exception.
(ah, si lo hago desde el mismo sub del evento DataReceived salta a la misma
exception)
Es como si estuviera en otro hilo de programa... Pero solo es un evento de
un SerialPort!!!
Alguna idea?
Gracias,
Jordi
Según la documentación de SerialPort: "The DataReceived event is raised
on a secondary thread when data is received from the SerialPort object."
Es decir, que efectivamente el evento se dispara en otro hilo. Si
quieres asignar los datos al TextBox, tendrás que transportar la información
entre hilos usando el método Invoke exactamente igual que lo harías si el
hilo estuviera creado por tí.
"Alberto Poblacion" <earthling-quitae...@poblacion.org>
escribió en el mensaje news:uJ6PAesG...@TK2MSFTNGP04.phx.gbl...
Parece la solución ideal!!! Pero he probado lo que dices y No consigo
que funcione:
Este es mi codigo en el form.designer.vb:
Me.ListView1.Dock = System.Windows.Forms.DockStyle.Fill
Me.ListView1.Location = New System.Drawing.Point(0, 0)
Me.ListView1.Name = "ListView1"
Me.ListView1.Size = New System.Drawing.Size(641, 290)
Me.ListView1.TabIndex = 0
Me.ListView1.UseCompatibleStateImageBehavior = False
Me.ListView1.CheckForIllegalCrossThreadCalls = False
Aparece la siguiente advertencia:
Advertencia 24 Acceso de miembro compartido, miembro de constante, miembro
de enumeración o tipo anidado a través de una instancia; la expresión
necesaria no se evaluará. E:\APPS\BCC2\BCC2\frmMain.Designer.vb 296 9 BCC2
* Con un textbox hace lo mismo!!
Gracias,
Jordi
"Popicinio" <popi...@iservicesmail.com> escribió en el mensaje
news:ORL$HBzTIH...@TK2MSFTNGP02.phx.gbl...
Public Sub New()
MyBase.New()
InitializeComponent()
Control.CheckForIllegalCrossThreadCalls = False
End Sub
Y asi lo que haces es que le quitar el CheckForIllegalCrossThreadCalls a
todo el formulario y a sus controles.
Prueba, que te tiene que funcionar.
Saludos
Popicinio
"Jordi" <jor...@hotmail.com> escribió en el mensaje
news:Op22bocU...@TK2MSFTNGP03.phx.gbl...
> Y asi lo que haces es que le quitar el CheckForIllegalCrossThreadCalls a
> todo el formulario y a sus controles.
Vale aclarar que esto no afecta solamente al formulario actual y sus
controles, sino a toda la aplicación (todos los formularios y todos los
controles).
Saludos,
Pedro Luna
"Popicinio" <popi...@iservicesmail.com> escribió en el mensaje de
noticias:#nQNPHiU...@TK2MSFTNGP05.phx.gbl...
gracias.
"Pedro Luna Montalvo" <pete...@hotmail.com> escribió en el mensaje
news:A3041574-7318-4B6F...@microsoft.com...
"Jordi" <jor...@hotmail.com> escribió en el mensaje
news:uFfKK4qU...@TK2MSFTNGP02.phx.gbl...
Hay un error acá. La propiedad CheckForIllegalCrossThreadCalls no es una
propiedad de instancia de la clase Control, sino que es una propiedad
estática de esa clase.
Esto quiere decir, que no es necesario que le asignes este valor a cada
formulario o control de tu programa; bastará que que en algún punto de
inicio de tu aplicación, ejecutes: Control.CheckForIllegalCrossThreadCalls
= False
No hay que hacer esto para todos los controles, o para todos los formularios
que se llamen posteriormente, ya que, como te indicaba, esta no es una
propiedad de las instancias de los controles, sino una propiedad estática de
la clase, una propiedad global por llamarlo de otra forma.
saludos,
Pedro Luna
"Jordi" <jor...@hotmail.com> escribió en el mensaje de
noticias:egy0XirU...@TK2MSFTNGP05.phx.gbl...