PDA

Ver la versión completa : [VB .NET] Corregir este error



Meta
25-03-2017, 19:59
Hola:

Hice un programa en VB .net 2017. Me da este error con el Me y no se como solucionarlo.

¿Alguna idea?

El código es:

Imports System
Imports System.Text
Imports System.IO.Ports
Imports System.IO
Imports System.Diagnostics
Imports System.Threading

Namespace Recibir_archivo_desde_Arduino_consola_06
Class Program

Shared cantidadBytes As Integer
Shared sb As New StringBuilder()

Shared Sub Main(args As String())
Dim COM As String = ""
' Título de la ventana.
Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro"
' Tamaño ventana consola.
Console.WindowWidth = 55 ' X. Ancho.
Console.WindowHeight = 18 ' Y. Alto.

' Crear un nuevo objeto SerialPort con la configuración predeterminada.
Dim Puerto_serie As New SerialPort()
' Configuración.
Console.Write("
Introduzca un número para seleccionar puerto COM.
Por ejemplo el 4, sería COM4.

Puerto: ")
COM = Console.ReadLine() ' Escribir el número del puerto.
Console.Clear()
Puerto_serie.PortName = "COM" & COM ' Número del puerto serie.

Puerto_serie.BaudRate = 115200 ' Baudios. 115200.
Puerto_serie.Parity = Parity.None ' Paridad.
Puerto_serie.DataBits = 8 ' Bits de datos.
Puerto_serie.StopBits = StopBits.One ' Bits de parada.
Puerto_serie.Handshake = Handshake.None ' Control de flujo.
' Establecer la lectura / escritura de los tiempos de espera.
Puerto_serie.ReadTimeout = -1 ' 500.
Puerto_serie.WriteTimeout = -1 ' 500.

Puerto_serie.Open() ' Abrir el puerto serie.

'Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler )
AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived
Console.WriteLine("Esperando datos desde Arduino... " & vbLf & "")
Console.ReadKey()
Puerto_serie.Close() ' Cerrar puerto.

End Sub

Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
'Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived

Dim sp As SerialPort = DirectCast(sender, SerialPort)
Dim indata As String = sp.ReadExisting()
Dim data As String() = indata.Split({"A"c})
cantidadBytes = Integer.Parse(data(0))

Select Case data(1).ToString()

Case "1"
Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: JPG")

Case "2"
Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: PNG.")

Case Else
Console.WriteLine("Cosas raras en 'data': " & data.ToString())

End Select

Dim contador As Integer = 0 ' Por si hal algún error.
Dim datosArray(0 To cantidadBytes - 1) As Byte

Select Case indata
Case "17729A1"
Thread.Sleep(100)
Dim miBuffer = Encoding.ASCII.GetBytes("OK1") ' Codificación ASCII.
sp.Write(miBuffer, 0, miBuffer.Length) ' Envía OK1 al puerto serie.

Case "2065A2"
Thread.Sleep(100)
Dim miBuffer2 = Encoding.ASCII.GetBytes("OK2") ' Codificación ASCII.
sp.Write(miBuffer2, 0, miBuffer2.Length) ' Envía OK2 al puerto serie.

Case Else
Console.WriteLine("Cosas raras en 'indata': " & indata.ToString())

End Select

While True

contador += sp.Read(datosArray, contador, datosArray.Length - contador) ' Por si hal algún error.
Console.SetCursorPosition(10, 6)
Console.Write("Datos recibidos: {0}", contador & " Bytes.")
Console.WriteLine(" ")
If (contador = cantidadBytes) AndAlso (contador = 17729) Then
Mensaje1()
File.WriteAllBytes("fotón.jpg", datosArray) ' Crear archivo en el disco duro.
Mensaje2()
Process.Start("fotón.jpg") ' Ejecutar visualizador de imágenes.
Mensaje3()
'break ' Garantiza que el ciclo termine.

End If

If (contador = cantidadBytes) AndAlso (contador = 2065) Then
Mensaje1()
File.WriteAllBytes("fotón.png", datosArray) ' Crear archivo en el disco duro.
Mensaje2()
Process.Start("fotón.png") ' Ejecutar visualizador de imágenes.
Mensaje3()
'break ' Garantiza que el ciclo termine.

End If

End While

End Sub

Public Shared Sub Mensaje1()
Console.WriteLine()
Console.WriteLine("Creando archivo al disco duro...")
End Sub


Public Shared Sub Mensaje2()
Console.WriteLine()
Console.WriteLine("Archivo creado. Ejecutando imagen.")
End Sub

Public Shared Sub Mensaje3()
Console.WriteLine()
Console.WriteLine("Imagen ejecutada.")
Console.WriteLine()
'Console.WriteLine("Cabecera recibida: " & indata & "" & vbLf & "")
Console.ForegroundColor = ConsoleColor.Yellow ' Letras amarillas.
Console.WriteLine("FIN DE PROGRAMA.")
Console.ForegroundColor = ConsoleColor.Gray ' Letras grises otra vez.
End Sub

End Class

End Namespace



Error:

Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error BC30043 'Me' solo es válido en un método de instancia. Recibir_archivo_desde_Arduino_consola_VB C:\Users\usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consol a_VB\Recibir_archivo_desde_Arduino_consola_VB\Modu le1.vb 51 Activo


;)

hystd
03-05-2017, 02:24
Buenas,

Parece que el problema puede estar aquí:


AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived

Si te fijas, más adelante tienes la función comentada...


Private Shared Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
'Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived


Un saludo.