Avatar billede unsigned Nybegynder
01. august 2006 - 13:16 Der er 7 kommentarer og
1 løsning

Skrive i tekstfelt før og efter sleep

Jeg har et csharp program. Af pædagogiske grunde har jeg kortet det lidt ned. Programmet er på ca. 200 linier.

funktion()
{
  Felt_et.Text = "Programmet er startet." ;
  Beregn ;
  for (gentages 5 gange)
  {
      Beregn ;
      Sleep(1000) ;
  }
  Felt_to.Text = "Programmet er sluttet." ;
}

Så skulle man tro at når programmet startede, så skrev det i felt et, ventede 5 sekunder, og skrev i felt to. Sådan som det rigtig skal. Men det sker ikke. Programmet starter, så går der 5 sekunder, og så skriver det i begge felter.

Alle bidrag modtages med tak.
Avatar billede arne_v Ekspert
01. august 2006 - 13:21 #1
nej

du kalder den funktion i noget event kode

event koden opdaterer noget data

din app hænger i 5 sekunder

event koden opdaterer noget data

event koden returnerer og din GUI opdateres nu til at vise de ændringer der
er lavet

du skal have en separat tråd til at opdatere og vente
Avatar billede mcgoat Nybegynder
01. august 2006 - 13:32 #2
Så han skal i sin Main:

Felt_et.Text = "Startet";
function();
Felt_to.Text = "Stoppet";
?
Avatar billede unsigned Nybegynder
01. august 2006 - 13:37 #3
Jeg er ikke så glad for tråd-programmering. Har man ikke en GUI.flush() kommando?
Ellers vil jeg prøve at løse problemet med en timer.
Avatar billede unsigned Nybegynder
01. august 2006 - 13:41 #4
-> mcgoat  Din løsning duer desværre ikke. Der er flere felter, end dem jeg har skrevet i den korte funkion. Jeg vil gerne kunne se, hvad programmet laver, så felterne skal opdateres løbende.
Avatar billede mcgoat Nybegynder
01. august 2006 - 13:47 #5
kan huske der var en kommando i VB der hed DoEvents, som man netop kunne bruge i sådanne situationer.. hmm.. prøver mig lige lidt frem :)
Avatar billede mcgoat Nybegynder
01. august 2006 - 13:54 #6
Works like a charm :)

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "Startet";
            Application.DoEvents();
            Thread.Sleep(5000);
            textBox2.Text = "Stoppet";
        }
Avatar billede mcgoat Nybegynder
01. august 2006 - 13:55 #7
DoEvents: Processes all Windows messages currently in the message queue.

Så den kører lige det den skal før den går videre :)
Avatar billede unsigned Nybegynder
01. august 2006 - 14:20 #8
Det virker. Mange tak.
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