Scrivere su una label

di
Anonimizzato13838
il
9 risposte

Scrivere su una label

Ciao a tutti,
nel codice di seguito elencato, come faccio ad inviare il valore letto dalla porta seriale (nello specifico caricato nella varibile indata) ad una casella di testo/label presente nel form1.
Se dopo "string indata = sp.ReadExisting();" provo ad inserire qualcosa tipo "label1.text= (indata);" mi da errore dicendo che label1 non esiste.

Grazie a tutti.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace SerialCommunication
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();

            serialPort1.PortName = "COM4";
            serialPort1.BaudRate = 9600;       
            serialPort1.Open();
            serialPort1.DiscardInBuffer();
            serialPort1.Write("");
           
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(RicezioneSeriale);
                   
                 
           
        }

   public void RicezioneSeriale (object sender, SerialDataReceivedEventArgs e)
    {
       
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();

    }

9 Risposte

  • Re: Scrivere su una label

    Hai creato la label? Se provi a settare un testo nel costruttore di Form1() (dopo la InitializeComponent()) viene accettato e funziona?
  • Re: Scrivere su una label

    Ne avevo già due sul form, e in quella sezione di codice incrimato non le riconosce.
    Ne ho creata un'altra manualmente nell'inizializzazione del form e non cambia nulla.
    E' come se la funzione RicezioneSeriale non vedesse tutto il resto!!!!

  • Re: Scrivere su una label

    Qual è l'esatta segnalazione di errore?
    Che tipo di oggetto è serialPort1? Dove lo hai dichiarato?
  • Re: Scrivere su una label

    Adesso stranamente la label la vede ma non prosegue in quanto si verifica il seguente errore "Operazione cross-thread non valida: è stato eseguito l'accesso al controllo 'label1' da un thread diverso da quello da cui è stata eseguita la creazione."

    L'oggetto serialPort1 è un'istanza della classe System.IO.Ports.

    Bops!!!!
  • Re: Scrivere su una label

    L'errore di "cross-thread" si verifica quando cerchi di accedere ai controlli da un thread diverso; probabilmente l'oggetto utilizzato ti richiama l'handler da un thread separato.
    La cosa migliore che puoi fare è quella di usare una variabile o un segnale che ti indica se ci sono o meno nuovi caratteri e scrivere una logica (magari richiamata da un timer) che verifica la presenza di nuovi dati.
  • Re: Scrivere su una label

    Con il Tick del Timer avevo già provato, ma dovendo aggiornare la lettura ogni 20/30 ms, va a finire che il Tick mi blocca il resto dell'applicazione.
    Ecco perchè ho usato il sistema con il nuovo thread.
  • Re: Scrivere su una label

    Ti suggerisco l'utilizzo di una coda; se i dati li devi solo visualizzare non c'è bisogno che "rinfreschi" il video ogni 20/30 msec
  • Re: Scrivere su una label

    Più che visualizzazione devo fare un aggiornamente continuo, quale ad esempio lo slide di una barra.
    In pratica dal mio Arduino leggo i valori di un segnale analogico che mi aggiorna il valore di una barra su un form.
  • Re: Scrivere su una label

    Ripeto che secondo me devi slegare la lettura dei dati che arrivano dalla seriale dalla loro visualizzazione a video.
    Questo probabilmente ti sembrerà più complicato che visualizzare direttamente i dati nel momento stesso in cui ti arrivano.
    I vantaggi ad adottare questo sistema sono numerosi, tra cui la possibilità di definire il tempo di refresh video (indipendentemente da ogni quanto arrivano i dati), la possibilità di veicolare i dati oltre che a video anche su disco (senza modificare le tempistiche di interazione con il dispositivo seriale)...
Devi accedere o registrarti per scrivere nel forum
9 risposte