Loop tijdens programma

Status
Niet open voor verdere reacties.

AndreasB

Gebruiker
Lid geworden
27 mei 2008
Berichten
14
ik zit met een programma dat elke seconde het beeld moet verversen, maar als ik het gewoon in een loop zet (bijvoorbeeld for(int 1=0; 1<10;i++)), dan wordt alleen de laatste getoond na 10 seconden (ik heb een sleep van 1 seconde ingebouwd). Voor die tijd heb ik nog geen form kunnen zien. ik heb this.show al geprobeerd daarmee zie ik de velden wel maar het veranderd pas na dat de loop is afgelopen.
Ik wil het zo maken dan een bepaald stuk constant geloopt wordt en dat het form daarop wordt aangepast.
Ik heb een aantal picture boxes waarvan de achtergrond kleur moet veranderen (bij gebrek aan led-jes in visual studio).
Weet iemand hoe ik kan zorgen dat de bewerkingen direct worden getoond en niet alleen de laatste? ik wil dit uiteindelijk met een while(true) kunnen doen en als ik eerst moet wachten tot hij klaar is met de loop voor ik iets kan zien, gaat dat daarmee heel lang duren.

Kan iemand mij dus helpen een loop te maken waarbij de form constant wordt bijgewerkt?
 
Je kunt eventueel gebruik maken van een timer die je instelt op een seconde. Ik heb voor een test een windows form gemaakt met twee buttons (btnUpdate en btnStop) en één textbox (txtUpdate). De timer gaat om de seconde de text in mijn textbox updaten.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace timer_Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int Value = 0;
        private System.Windows.Forms.Timer myTimer;

        private void Form1_Load(object sender, EventArgs e)
        {
            //Create a timer
            myTimer = new Timer();
            myTimer.Interval = 1000;
            myTimer.Tick +=new EventHandler(myTimer_Tick);

            txtUpdate.Text = "Windows Loaded...";

            //Start Timer
            myTimer.Enabled = true;
            myTimer.Start();
        }

        private void myTimer_Tick(object sender, EventArgs e)
        {
            //Update the textbox
            txtUpdate.Text = "Text Updated value = " + Value.ToString();
            Value++;
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            //Stop the timer
            myTimer.Stop();
            //Update text
            txtUpdate.Text = "Timer Stopped";
            Value = 0;
        }
    }
}
 
Hey,

in de lus kun je ook de code
Code:
Application.DoEvents();
zetten. Dan wordt het formulier bijgewerkt.
Dit moet wel voor de Sleep().

Dit is een hele vieze manier van programmeren. De timer is natuurlijk een betere oplossing.
Maar deze code kan ooit misschien van pas komen..

Gr,
Mathijs
 
Dankjewel voor jullie reacties mijn probleem is verholpen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan