![]() |
ERROR: Referencia a objeto no establecida como instancia de un objeto.
Hola:
En este código me sale un error y no se como corregirlo, ya que me interesa mostrar datos en pantalla y no me sale. Ver error. Código hecho hasta ahora. Código:
using System; ¿Alguna idea? Saludos. |
Son errores distintos el del título del hilo y el de la captura de pantalla. En la captura se ve que estás accediendo a un elemento del array "numeros", por el índice almacenado en la variable "contador", y este contador esta fuera del intervalo del array. O sea es menor que el mínimo o mayor al máximo. Fíjate en la captura que "numeros" tiene una dimensión de 6, y dado que las posiciones son en base cero, estas van de 0 a 5. Por otro lado la variable "contador" tiene el valor 6, o sea está intentando acceder al séptimo elemento de un array de seis.
Por otro lado veo seguidos tus posts, y espero que no suene mal lo que digo, pero creo que debes aprender las bases del lenguaje que estás usando. Me parece que te estás peleando con lo más básico sin poder abstraer el problema. Te recomiendo ver algún curso del lenguaje online, que sin lugar a dudas te hará ahorrar mucho tiempo. Lo primero que me aparece al buscar "C# básico": https://www.youtube.com/watch?v=6W2wYwHQNT4 Saludos! |
Gracias por el vídeo.
Y... Perdón., me equivoqué de enlace sobre la imagen que en realidad es esta. ![]() Saludos. |
Ok, según esa imagen dato es NULL, o sea no tiene un valor asignado, por ese motivo el NullReferenceException.
No puedes acceder a propiedades de objetos no asignados, es como averiguar la edad de un perro que no existe. El error seguramente está en la llamada a la función, y suele ser correcto que la función falle, pero deberías evaluar la asignación del parámetro y fallar con NullArgumentException detallando el parámetro no asignado. Saludos. |
Me da la impresión de que tu función SerialPort_DataReceived no se está ejecutando. Esa función, se ejecuta en un Thread aparte, y en tu código no veo el "using System.Threading;" después de "using System.IO.Ports;"
|
Buenas:
El programa se trata de que si le entra datos desde el puerto serie, que sea natural y almacenarlo en una variable tipo Byte[]. Luego mostrarlo en pantalla. Hablando lo del Thread pongo un ejemplo en un mini chat que si lo usa, me imagino que te refieres a esto: Código:
using System; |
Insisto, debes abstraer los problemas de la lógica general del programa. Si miras el código como todo uno, no podrás llegar a desarrollar algo extenso, la programación se trata de dividir un problema, en muchos problemas pequeños.
Viendo tu código (el del inicio del post, este último no se que es), abres el puerto en la línea 58, y en la línea 66 llamas a MostrarBytes, sin ningúna garantía de que el buffer datoRecibido haya recibido datos. Simplemente si no tenías nada conectado en el puerto serie, el código producirá inevitablemente un NullReferenceException. Y si hubiera un dispositivo conectado, puede suceder una condición de carrera donde primero evalúas el buffer y luego recibes los datos. Una simple solución puede ser tener la variable datoRecibido inicializada con un array vacío a la espera de datos, total la estas extendiendo cada vez que recibes datos. Pese a esto que te digo, lo único que lograrás es no generar excepciones, dado que el programa fallará pq no resultará lo que espera el usuario. Saludos. |
El código del primer post no es mio en absoluto, lo saqué en Internet pero no funciona. Como nadie responde en esa Web, lo pregunto aquí.
Y si, hay que resolver partes por partes. La idea es, que el puerto abre cuando inicio el programa, a la espera que lleguen datos por el puerto serie cuando desde el otro lado envíe tramas de bytes, se almacene en un arrray y lo muestre en pantalla. |
La franja horaria es GMT +2. Ahora son las 20:39:05. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi