04. januar 2012 - 10:35Der 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);
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"?
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
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.....
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?
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.
Tak - også for de sidste tips - dem kan jeg også bruge :-)
Synes godt om
Ny brugerNybegynder
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.