58 messaggi dal 08 novembre 2007
Buongiorno
sto realizzando una windows form..
che riceve segnale gps,faccio la scansione delle porte per vedere su quale porta è presente segnale gps.... ma quando vado a chiudere il programma mi resta in debug o provato a fare dispose sulla porta e close ma niente

resta ugualmente in debug e devo stopparlo premendo stop

inoltre se invece sulla porta trovo segnale gps non mi è consentito chiudere la porta perchè va in errore visto che il gps è connesso tramite bluetooth ma fa tutto in automatico senza che io apro la connessione....

potete aiutarmi

public void disposeGps(simpleGps gps)
        {
            GC.SuppressFinalize(gps);
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            

            try
            {
                btnSalvaGps.Enabled = false;
                if (portagpsTrovata == false || !nomeporta.Equals("COM" + portanum))
                {
                    //SE NON HO SELEZIONATO LA PORTA LA CERCO
                    if (nomeporta.Equals(""))
                    {

                        portanum = 0;
                        do
                        {
                            /*CERCO LA PORTA QUANDO LA TROVO IMPOSTA A=0 
                            E ESCO DAL CICLO ALTRIMENTI ESCO SE SONO ARRIVATO ALLA COM "MAX_PORTE" IMPOSTATA NEL FILE DI SETTING
                            SENZA TROVARE NULLA*/
                            try
                            {
                                portagps = new SerialPort("COM" + portanum);
                                mlink = new simpleGps(portagps);
                                if (portagps.ReadExisting().Contains("GPGGA"))
                                    a = 0;
                                else
                                    a = 1;
                            }
                            catch
                            {
                                a = 1;
                            }
                        }
                        while (a == 1 && (portanum = (portanum + 1) % (Settings.Settings1.Default.MAX_PORTE)) > 0);

                        // SE HO TROVATO LA PORTA SCRIVO ALTRIMENTI MOSTRO UN MESSAGGIO A VIDEO
                        if (a.Equals(0))
                            labelPorta.Text = portagps.PortName.ToString();
                        else
                            MessageBox.Show("Porta non trovata");
                    }
                    else
                    {
                        // SELEZIONE PORTA MANUALE
                        portagps = new SerialPort(nomeporta);
                        mlink = new simpleGps(portagps);
                        labelPorta.Text = portagps.PortName.ToString();
                        if (!portagps.ReadExisting().Contains("GPGGA"))
                        {
                            // SE NON è PRESENTE SEGNALE GPS MOSTRO MESSAGGIO A VIDEO
                            MessageBox.Show("Su Questa porta non sono presenti dispositivi GPS");
                            a = 1;
                        }
                    }
                }

                if (a.Equals(0))
                {
                    portagpsTrovata = true;
                    btnGuarda.Visible = true;
                    Button_stop.Visible = true;
                }
                else
                {
                    btnSalvaGps.Enabled = true;
                    goto FINE;
                }
                //SE NON HO TROVATO IL GPS SALTO ALLA FINE
                int i = 0;
                bool incremento = true;
                while ( a == 0)
                {
                    i++;
                    
                    if (i == 50000)
                    {
                        if (incremento ==true)
                            progressBar1.Value = progressBar1.Value + 1;
                        else
                            progressBar1.Value = progressBar1.Value - 1;
                        i = 0;
                    }
                    if (mlink.isValidGpsData())
                    {
                        txtLongitudine.Visible = false;
                        txtLatidudine.Visible = false;
                        mia = mlink.getDatiAggiornati("GPGGA");
                        TEST = (NMEA_Adapter.GPGGA)mlink.getDatiAggiornati("GPGGA");
                        latidudine = TEST.getLatitudine();
                        lblLat.Visible = true;
                        lblLong.Visible = true;
                        lblLat.Text = latidudine;
                        longitudine = TEST.getLongitudine();
                        lblLong.Text = longitudine;
                        statoSat.Text = TEST.getQualitaSegnale();
                    }
                    
                    if ((progressBar1.Value == 100 || progressBar1.Value == 0) && i==0)
                        incremento = !incremento;
                    Application.DoEvents();
                }
                if (a == 1)
                {
                    btnSalvaGps.Enabled = true;
                    progressBar1.Value = 0;
                }
                else
                {
                    //mia = mlink.getDatiAggiornati("GPGGA");
                    //string segnale = TEST.getQualitaSegnale();
                    //latidudine = TEST.getLatitudine();
                    //ora = TEST.getOra();
                    //lblLat.Text = latidudine;
                    //longitudine = TEST.getLongitudine();
                    //lblLong.Text = longitudine;
                    gpsManuale = false;
                    btnSalvaGps.Enabled = true;
                    label1.Text = ora;
                    label1.Visible = true;
                    lblLat.Visible = true;
                    lblLong.Visible = true;

                }
            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.ToString());
                progressBar1.Value = 0;
                if (gpsManuale == true)
                    btnSalvaGps.Enabled = true;
            }
            finally
            {
                Button_stop.Visible = false;
                a = 0;
                            
            }
            FINE:
            
            ;
        }


questo è il codice mi serve qualcosa per chiudere il collegamento con il bluetooth penso la libreria 32feet e qualcosa che mi faccia terminare il debug perchè anche cliccando sulla x il programma resta in debug e devo stopparlo manualmente
Se il debug non termina è perché il processo non si chiude. Tra le cause non credo sia l'aver lasciato aperto le porte perché comunque il segnale di chiusura chiama automaticamente il Dispose.
Piuttosto in genere questo è dovuto ad un Thread non di background che sta ancora girando. Non so come lavora quella libreria ma probabilmente fa qualcosa del genere.
Nel tuo codice comunque non vedo il Dispose ne di SerialPort ne di mLink. E' sbagliato fare GC.SuppressFinalize(gps) perché così ottieni l'effetto contrario e cioè in fase di chiusura dell'applicativo non fai finalizzare l'oggetto e quindi non fa neanche il Dispose automatico.

Ciao

Il mio blog
Homepage
58 messaggi dal 08 novembre 2007
il problema è che serial port ha il metodo dispose ma non posso utilzzarlo perchè mi va in errore... il programma dicendomi che è utilizzata da un altra applicazione (credo il bluetooth)

mentre mlink non ha proprio il metodo dispose in quella libreria non è presente quindi mi sono creato la mia funzione!

Io penso che resti attivo il bluetooth perchè la connessione con il gps bluetooth avviene in automatico e quindi avrei bisogno di chiuderla.

Come faccio?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.