Visual Basic.NET - Excepción del tipo "System.InvalidOperationException" en System.Windows.Forms.dll

 
Vista:
sin imagen de perfil

Excepción del tipo "System.InvalidOperationException" en System.Windows.Forms.dll

Publicado por Juanjo (2 intervenciones) el 11/03/2016 22:38:52
Buenas noches,
llevo poco tiempo programando, y menos aún en este entorno.
Estoy con Visual Basic 2008 Express Edition. Quiero recibir mediante el puerto serie unos datos del encoder conectado a un Arduino Uno.
El código para recibir datos es el siguiente,

1
2
3
4
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    buffer = SerialPort1.ReadExisting.Trim
    TextBox1.Text = buffer
End Sub

Y quiero mostrar el valor recibido en un TextBox.
Al compilar me da este error y no tengo ni idea de como solventarlo.


No se controló System.InvalidOperationException
Message="Operación no válida a través de subprocesos: Se tuvo acceso al control 'TextBox1' desde un subproceso distinto a aquel en que lo creó."
Source="System.Windows.Forms"
StackTrace:
en System.Windows.Forms.Control.get_Handle()
en System.Windows.Forms.Control.set_WindowText(String value)
en System.Windows.Forms.TextBoxBase.set_WindowText(String value)
en System.Windows.Forms.Control.set_Text(String value)
en System.Windows.Forms.TextBoxBase.set_Text(String value)
en System.Windows.Forms.TextBox.set_Text(String value)
en SErie.Form1.SerialPort1_DataReceived(Object sender, SerialDataReceivedEventArgs e) en C:\Documents and Settings\Juanjo\Mis documentos\SErie\SErie\Form1.vb:línea 66
en System.IO.Ports.SerialPort.CatchReceivedEvents(Object src, SerialDataReceivedEventArgs e)
en System.IO.Ports.SerialStream.EventLoopRunner.CallReceiveEvents(Object state)
en System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)
en System.Threading.ExecutionContext.runTryCode(Object userData)
en System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
en System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
en System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
InnerException:




Llevo varios días dando vueltas al tema y me supera. Si alguien puede orientarme le estaría muy agradecido. Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excepción del tipo 'System.InvalidOperationException' en System.Windows.Forms.dll

Publicado por Miguel (476 intervenciones) el 12/03/2016 07:24:41
Hola, prueba usando un control "Timer" para agregar los datos al textBox y no hacerlo directamente como lo estás haciendo. Algo como:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim buffer As String = String.Empty
 
Dim agregar As Boolean = False
 
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    buffer += SerialPort1.ReadExisting.Trim
    agregar = True
End Sub
 
Private Sub Timer1_Tick(sender As Objetc, e As EventArgs) Handles Timer1.Tick
    If (agregar) Then
        TextBox1.Text =buffer
    End If
End Sub

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Excepción del tipo 'System.InvalidOperationException' en System.Windows.Forms.dll

Publicado por Juanjo (2 intervenciones) el 12/03/2016 08:26:10
Buenas Miguel,
muchisimas gracias por tu respuesta. Ahora parece que ya no me da el error.
Serías tan amable de decirme que estaba haciendo mal??
El código que ponía estaba igual en múltiples tutoriales,.....
Muchísismas gracias Miguel.
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excepción del tipo 'System.InvalidOperationException' en System.Windows.Forms.dll

Publicado por Miguel (476 intervenciones) el 12/03/2016 11:15:50
Hola,
Creo que el evento "DataReceived" se realiza en un proceso asincrónico, y es por eso que no se pueden manipular los controles (todo lo que genere un cambio/evento).


Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Excepción del tipo 'System.InvalidOperationException' en System.Windows.Forms.dll

Publicado por Miguel (476 intervenciones) el 13/03/2016 06:35:01
1
2
3
4
5
6
Private Sub Timer1_Tick(sender As Objetc, e As EventArgs) Handles Timer1.Tick
    If (agregar) Then
        TextBox1.Text =buffer
        agregar = False
    End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar