Avatar billede olesen85 Nybegynder
22. september 2011 - 09:05 Der er 6 kommentarer og
1 løsning

read from com port

Jeg har problemer med at når min kode når til ReadData = comport.ReadExisting(); så får jeg denne felj nogen der har en løsning på mit problem (An unhandled exception of type 'System.StackOverflowException' occurred in System.dll)



public void InitializeBackgroundWorker()
        {
           
            backgroundWorker1.WorkerSupportsCancellation = true;
            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
           
           
        }

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            e.Result = readstring(worker, e); //Jeg kalder readstring
           
        }   
public void openport()
        {
            //, parity: Parity.Even, dataBits: 8, stopBits: StopBits.One
            BaudRateInt = Convert.ToInt32(BaudRate);
            comport = new SerialPort(portName: Port, baudRate: BaudRateInt);
            //comport.ReadTimeout = 100000;
            comport.Handshake = Handshake.None;
            //comport.DataReceived += SerialDataReceivedEventHandler(readstring);

            comport.Open();
        }

string readstring(BackgroundWorker worker, DoWorkEventArgs e)
        {         
            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
               
            else
            {
                if (results != "!PA1")
                {
                    try
                    {
                        ReadData = comport.ReadExisting();
                        char[] delimiterChars = { ',' };
                        string[] words = ReadData.Split(delimiterChars);
                        data = words[0];
                        results = data;
                        readstring(worker, e);
                     
                    }
                    catch (TimeoutException)
                    {
                        readstring(worker, e);
                    }
                    catch (IOException)
                    {
                        readstring(worker, e);
                    }

                }
            }
           
            return ReadData;
        }
Avatar billede heinzdmx Nybegynder
22. september 2011 - 09:23 #1
En StackOverflowException er typisk at man har en uendelig løkke der bliver ved med at kører og så lave et ekstra niveau på stacken.


I det her tilfælde vil du altid kalde readstring igen og igen, med mindre at cancellation er pending.

if (results != "!PA1")
{
        try
        {
                ReadData = comport.ReadExisting();
                char[] delimiterChars = { ',' };
                string[] words = ReadData.Split(delimiterChars);
                data = words[0];
                results = data;
                readstring(worker, e); // bør den være der? Uendelig løkke
        }
        catch (TimeoutException)
        {
                readstring(worker, e);
        }
        catch (IOException)
        {
                readstring(worker, e);
        }
}
Avatar billede olesen85 Nybegynder
22. september 2011 - 09:42 #2
Eller results er = !PA1
Avatar billede heinzdmx Nybegynder
22. september 2011 - 09:49 #3
Ah ja.

Til det formål kan du i stedet lave en while løkke:

while (results != "!PA1")
{
        try
        {
                ReadData = comport.ReadExisting();
                char[] delimiterChars = { ',' };
                string[] words = ReadData.Split(delimiterChars);
                data = words[0];
                results = data;
        }
        catch (TimeoutException)
        {
        }
        catch (IOException)
        {
        }
}
Avatar billede olesen85 Nybegynder
22. september 2011 - 10:35 #4
det virkede :) smid et svar
Avatar billede heinzdmx Nybegynder
22. september 2011 - 10:50 #5
Svar her :)
Avatar billede olesen85 Nybegynder
22. september 2011 - 11:49 #6
du har fået smidt en kommentar i stedet for et svar
Avatar billede heinzdmx Nybegynder
22. september 2011 - 12:09 #7
Hov. Så kommer der et rigtigt svar her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester