Avatar billede simsen Mester
04. januar 2012 - 10:35 Der er 5 kommentarer og
1 løsning

Metode forskelligt hvis jeg bruger "Run to Curser" i stedet for at køre den

Hej,

Nu skal det altså være slut. Det er sket for mig før og nu igen. Jeg er ved at blive sindssyg (ok lidt mere end jeg har været før) ;-)

Som sagt - jeg har prøvet det i forskellige metoder også nedenfor viste;

Mit problem er at kører jeg en "Run to curser", altså hvor jeg stepper mig igennem hver linje, så kører metoden perfekt. Den går igennem hver række, hvis jeg der imod bare bruger almindelig F5 eller Ctrl + F5 (med og uden debugging), så viser den ikke samme resultat.....og det med nøjagtig samme input.

Helt konkret har jeg en textbox, hvor jeg pr. default har skrevet noget. Nu klikker jeg så på min knap, og den viser mig ikke resultatet som jeg forventer. Jeg vil så steppe mig igennem koden, så jeg laver en "Run to curser" på første linje. Ingen fejl, den stepper pænt igennem og viser mig det resultat, jeg forventer.

Hvordan finder man så fejlen????

Mit eksempel kode, hvor det går galt;

//count up the ID for the RemoteInterface Data
            m_ID++;
            cRI_CSearchAddress data = new cRI_CSearchAddress();           
            //Initalize index with 0
            data.m_ID = m_ID;
            data.m_address = txtInputAddress.Text; //"D,76131,Karlsruhe,Stumpfstrasse,1";
            data.m_result_address = txtInputAddress.Text;
            //Write the data in the shared memory an send the message to the Navigator
            int iRet = m_RI.SearchAddress_WriteData(m_ID, data);
           
            if (iRet != (int)RI_Errors.RI_NOERROR)
            {
                //Error, the Navigator is not running, please send the Message
                //again
            }
            else
            {
                int readData = m_RI.SearchAddress_ReadData(m_ID, ref data);

                string mid = data.m_ID.ToString();
                txtId.Text = data.m_ID.ToString();
                string mercatorx = data.m_mercator_x.ToString();
                txtMercatorX.Text = data.m_mercator_x.ToString();
                string mercatory = data.m_mercator_y.ToString();
                txtMercatorY.Text = data.m_mercator_y.ToString();
                string resultaddress = data.m_result_address.ToString();
                txtResultAddress.Text = data.m_result_address.ToString();
                string address = data.m_address.ToString();
                txtAddress.Text = data.m_address.ToString();
            }
        }

Og nej - det er ikke relateret til ovennævnte klasse, jeg bruger. Jeg har også haft fejlen i asp.net, hvor jeg slet ikke var i nærheden at bruge den her klasse. Det har også der været forskellige ting - en gang var det i forbindelse med at oprette en mappe på serveren. En anden gang var det da jeg ville lave thumbnails. Begge gange måtte jeg slet og ret dele metoden op så brugeren skulle klikke på en ekstra knap.

Så hjælp.....hvorfor får jeg metoden korrekt, når jeg bruger "Run to cursor", og fejl når jeg bruger en "Start debugging"?
Avatar billede lasserasch Juniormester
04. januar 2012 - 10:54 #1
Det burde da heller ikke kunne lade sig gøre.

"Created Time" for din exe eller DLL, er den altid ny (altså build tidspunktet). Både når du debugger og ikke gør?

Mvh.
Lasse
Avatar billede runesoft Nybegynder
04. januar 2012 - 11:13 #2
Kan være et samtidighedsproblem. Når du stepper dig igennem er der jo masser af tid til at andre ting kan blive færdige i baggrunden. Prøv at sætte Thread.Sleep(...) ind for at se om det er det. Men det er bare et gæt
Avatar billede simsen Mester
04. januar 2012 - 15:01 #3
runesoft

Så enkelt det var........Det du skrev gav jo rigtig meget mening. Mit program går over i et andet program og skriver noget ind, hvorefter jeg igen går i det andet program og henter en værdi fra det der er skrevet ind. Og når jeg kører det uden Sleep på, så går det åbenbart for stærkt for det andet program :-)

Med andre ord, dit forslag om at sætte en Thread.Sleep på virker bare som det skal.

Tak for svar og smid et svar så du kan få dine points :-)

PS: Når jeg tænker tilbage på de andre gange, hvor det har været samme problem, så kan det faktisk også tænkes at det har været samme løsning, der skulle være brugt. Her gik jeg også i gang med at oprette mapper/filer osv.....og hvis den så ikke var færdig med det før jeg lagde ting ned i mapperne.....
Avatar billede lasserasch Juniormester
04. januar 2012 - 17:40 #4
Men simsen, så har du da et helt andet problem... Thread.sleep er jo en ret dårlig løsning. For hvad nu hvis du sleeper i 1 sekund og det tager 1,5 sekunder før du får den rigtige værdi ud.

Du er da nødt til at være sikker på at den værdi du trækker ud er korrekt. F.eks. ved at trække værdien først, sætte det du skal sætte og så blive ved med at trække igen indtil du ikke får samme værdi tilbage som første gang du trak.

Hvis du forstår hvad jeg mener....

Jeg har bare set så mange steder hvor folk bruger thread.sleep, og det giver næsten altid uforudsete problemer, hvis man bruge det på den måde som du i så fald ville gøre.

Hvad hvis dit andet program ikke får sat det den skal korrekt?

Bare en observation.

Mvh.
Lasse
Avatar billede runesoft Nybegynder
04. januar 2012 - 19:13 #5
her et svar...  Hvis du på nogen måde har styr på det andet program eller kan finde ud af hvornår data er færdig skal du selvfølgelig gøre det. Hvis det andet program er en sort kasse og du ikke har mulighed for at forspørge om data er klar ender du nok med en Thread.Sleep.  Evt. kan du lave et loop så hvis den fejler efter et sekund prøver du igen efter 2 sekunder etc.
Avatar billede simsen Mester
09. januar 2012 - 08:04 #6
Tak - også for de sidste tips - dem kan jeg også bruge :-)
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