Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260

    [C#]Eccezione TimeoutException di serialPort

    Ciao a tutti.
    Sto scrivendo un applicazione che scrive e legge su seriale tramite l'oggetto serialPort di visual C#.
    Tale oggetto è creato nel form della finestra e con i pulsanti vado a leggere cosa mi ritorna in byte un dispositivo che interrogo.
    Il mio problema è che se la Read ( dentro un while(true) ) non trova nulla, mi lancia una TimeoutException e la finestra mi si blocca completamente finchè non arrivano dati dal dispositivo collegato con la seriale.Vorrei che cio' non accadesse....
    Come potrei fare?

    grazie 1000

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    nessuno sa perchè la finestra si blocca con tale eccezione???

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    un thread separato che si occupa della lettura/scrittura seriale puo' essere la soluzione?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da jeangr
    un thread separato che si occupa della lettura/scrittura seriale puo' essere la soluzione?
    Direi proprio di sì ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    come mi consigliate di fare?
    creo una classe che come parametro del costruttore prenda un riferimento alla serialPort già creata e faccio partire il thread?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì ... prova!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    nulla da fare...

    ho fatto in modo che la mia serialPort venga costruita dentro il thread che gestisce la serialPort ( di nome serialThread), quindi totalmente staccata dall'oggetto Form che la creava prima.
    Ho creato una proprietà get all'interno della mia classe serialThread che ritorna un riferimento a serialPort.Tale proprietà l'ho utilizzato nei vari metodi della Form per ottenere e manipolare cosi la serialPort....

    che sbaglio?
    tutto rimande inchiodato come prima....

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... senza vedere il codice non mi pare possibile darti una risposta ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    Questo è il codice della finestra che crea il thread e lo fa partire:

    codice:
    public partial class Form1 : Form
        {
    
            serialThread serialObject;
            public Form1()
            {
                InitializeComponent();
                serialObject = new serialThread(this); //passo la finestra
                Thread workerThread = new Thread(serialObject.DoWork);
                workerThread.Start();
    
    ....

    Questo è il codice del mio thread:

    codice:
    class serialThread
        {
            private Form1 f;
            private volatile SerialPort serialPort;
            
            internal serialThread(Form1 _f)    //il costruttore inizializza la serial Port
            {
                f = _f;
                serialPort = new SerialPort();
                serialPort.BaudRate = 115200;
                serialPort.PortName = "COM6";
            }
            
            public SerialPort serialPort1
            {
                get { return serialPort; }
            }
    
            // This method will be called when the thread is started.
        public void DoWork()
        {
            
        }
    
        /*va partire il polling sulla seriale.Praticamente è un ciclo while che fa continue Read su seriale e si stoppa quando arrivano dati.Questa funzione blocca tutto*/
        public void atrivaPolling(libgeneric primitiva)
        {
            byte polling = globalVariables.POLLINGA;
            bool d = true;// Debug on
            byte[] status = new byte[10];
            string result = primitiva.setPolling(polling, status, d);
        }
        }
    }

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non vedo il ciclo ... e comunque il codice che gestisce continuamente la seriale dovrebbe stare nella DoWork ... ... altrimenti il nuovo thread non serve a nulla (anzi, questo termina appena inizia ...)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.