[C#] Loop schijnt niet te werken.

Pagina: 1
Acties:

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 01-12 20:10

aex351

I am the one

Topicstarter
Ik ben nu bezig in C# en ik ben tegen een probleem aan gestuit waar ik niet uit kom. Ik wil een loop maken waardoor de gegevens welk worden weergeven in een label continue geupdate worden. Zonder zelf op een knop oid te hoeven klikken. Nu lukt het mij dit dus niet om dit geautomatiseerd te laten doen.

C#:
1
2
3
4
5
6
7
8
9
10
        private void Form1_Load(object sender, EventArgs e)
        {
            runPing();
            while (true)
            {
                WANip test = new WANip();
                this.label8.Text = test.getWANip();
                Thread.Sleep(10000);
            }
        }

Wat ik wil bereiken is dat die loop continue uitgevoerd blijft worden met pauzes er tussen in. Ik zie dus niet wat ik precies fout doe en hoop dat iemand mij hierop kan wijzen.

< dit stukje webruimte is te huur >


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
ik hoop dat je ergens een andere thread hebt draaien die je messages handled?
weet het niet zeker, maar ik gok dat je hele app nu freezed..

This message was sent on 100% recyclable electrons.


  • aex351
  • Registratie: Juni 2005
  • Laatst online: 01-12 20:10

aex351

I am the one

Topicstarter
BasieP schreef op zaterdag 07 april 2007 @ 21:39:
ik hoop dat je ergens een andere thread hebt draaien die je messages handled?
weet het niet zeker, maar ik gok dat je hele app nu freezed..
Wanneer ik de app wil draaien gebeurd er gewoon totaal niets, lijkt wel vast te lopen. Sta voor een raadsel.

[ Voor 3% gewijzigd door aex351 op 07-04-2007 21:45 ]

< dit stukje webruimte is te huur >


  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 09:57
Zolang je dit loopje niet in een nieuwe thread start, zal je programma nooit verder komen dan continue je loopje draaien.

  • Padschild
  • Registratie: September 2004
  • Laatst online: 28-11-2020
Wat er gebeurd is dat je app in een oneindige loop zit en geen enkele functie kan uitvoeren. Als jij je thread sleept, gebeurt er werkelijk niks, echt helemaal niks. Ook is er geen manier om uit deze loop te komen en kun je klikken wat je wilt op je form, maar omdat deze bezig is met je loopt, gebeurt er niks.

Wat je volgesmij kan doen is een APARTE thread aanmaken om deze te checken of gewoon gebruik maken van een timer functie oid?

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 27-10 15:31
aex351 schreef op zaterdag 07 april 2007 @ 21:45:
[...]

Wanneer ik de app wil draaien gebeurd er gewoon totaal niets, lijkt wel vast te lopen. Sta voor een raadsel.
Wat verwacht je dan je laat je thread 10seconden slapen dan voer je in enkele kloktikken je code uit en laat je hem gelijk weer slapen. Er blijft dus helemaal geen tijd over, voor de display code.

Gebruik dus een aparte thread voor je display (gui), of gebruik een timer als je even wilt wachten..

ps. al weer numbero 11en...

[ Voor 3% gewijzigd door djexplo op 07-04-2007 21:56 ]

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 09:57
^^ hierboven, timerfunctie is een stuk nettere oplossing voor wat je wilt.

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 23:45

Klippy

Still Game

Je moet dit in een nieuwe thread gaan doen inderdaad, die doet dan in principe niks anders dan die lijst blijven verversen, pauze, verversen, pauze etc.
Maar je hoofdprogramma is nu dezelfde thread, dus dat gaat inderdaad nooit goed. Je zet nu steeds je hoofdprogramma op pauze, maar nog veel erger is dat je programma ook nooit uit deze oneindige lus komt :)

http://www.yoda.arachsys.com/csharp/threads/ was mijn 1e hit op google, maar er zijn nog honderden pagina's die een introductie geven over multithreading in C#, dus met wat inlezen snap je het wel ooit, al is multithreading niet altijd even makkelijk om meteen door te hebben.

Voor jou is het misscihen ook niet nodig, vaak hebben controls zelf al een soort thread die om de zoveel tijd doet updaten. Of zet er een simpele timer op. http://msdn2.microsoft.co.../system.timers.timer.aspx

die doet in feit ook een soort thread aanmaken en voort code uit op een bepaald interval, maar daar hoef je zelf niks voor te doen en dat gaat ook niet vaak mis, dat lijkt me meer dan voldoende voor dit soort simpele taakjes. Multithreading is over 't algemeen alleen maar nodig als je heel ingewikkelde CPU vretende routines gaat uitvoeren of als je op willekeurige momenten data moet opvangen oid.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • aex351
  • Registratie: Juni 2005
  • Laatst online: 01-12 20:10

aex351

I am the one

Topicstarter
Bedankt voor de oplossing, de timer was inderdaad wat ik zocht.

[ Voor 63% gewijzigd door aex351 op 07-04-2007 22:23 ]

< dit stukje webruimte is te huur >


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
aex351 schreef op zaterdag 07 april 2007 @ 21:45:
[...]

Wanneer ik de app wil draaien gebeurd er gewoon totaal niets, lijkt wel vast te lopen. Sta voor een raadsel.
Tuurljk loopt je applicatie vast; je blokkeert met je oneindige loop de GUI thread. Je applicatie heeft dus geen tijd om iets anders te doen.
Wat je kan doen, is Application.DoEvents aanroepen in je loop, maar een nettere oplossing is om gebruik te maken van een andere thread om dit te doen; echter, je moet er dan wel voor oppassen dat je ervoor zorgt dat het je GUI thread is, die uiteindelijk je windows controls gaat aanpassen. Als je gebruik maakt van .NET 2.0 kan je gebruik maken van een BackGroundWorker (Zie MSDN) component die dit allemaal voor jou abstraheert. Indien je geen .NET 2.0 gebruikt, zal je zelf een soort BackgroundWorker moeten implementeren; hiervoor kan je even kijken naar het Task pattern. (Zie een paar topics hierover in PRG)

Zoals ook gezegd door Klippy zou een Timer hier ook soelaas bieden; en dat is misschien idd wel de meest eenvoudige oplossing.

/komt ervan als je even een dag niet online bent; spuit-11-en

[ Voor 8% gewijzigd door whoami op 08-04-2007 11:08 ]

https://fgheysels.github.io/

Pagina: 1