Avatar billede thomas-k Nybegynder
02. april 2008 - 20:29 Der er 11 kommentarer og
1 løsning

løkke med en timeout

Jeg har følgende løkke i min windows form, hvori jeg gerne vil have en form for timeout, så løkken køres 1 gang i sekundet. Hvorledes kan jeg gøre dette?

for (int i = 1; i<=3; i++)
{
textBox1.Text = "gør et eller andet hvert sekund";
}
Avatar billede arne_v Ekspert
02. april 2008 - 20:35 #1
ubrugeligt svar:

put en Thread.Sleep(1000) ind i loekken

den ubehagelige sandhed:

du maa ikke vente i din event traad fordi hele GUI laaser saa inkl. dine opdateringer

du skal starte en separat traad og opdatere GUI via delegate og invoke
Avatar billede thomas-k Nybegynder
02. april 2008 - 20:37 #2
hehe, ja, det startede jeg også med... hmm, har ikke anvendt delegate og invoke før.
Avatar billede arne_v Ekspert
02. april 2008 - 20:41 #3
Jeg har desvaerre kun et VB.NET eksempel paa lager, men se om ikke du kan lave det
i C#:

Imports System
Imports System.Threading

Public Class Form1
    Private done As Boolean
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        done = False
        Dim t As Thread = New Thread(AddressOf TextUpdateThread)
        t.Start()
    End Sub
    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        done = True
    End Sub
    Private Sub TextUpdateThread()
        Dim i As Integer = 0
        While Not done
            i = i + 1
            If TextBox1.InvokeRequired Then
                TextBox1.Invoke(New TextUpdateHandler(AddressOf TextUpdate), New Object() {i})
            Else
                TextUpdate(i)
            End If
            Thread.Sleep(1000)
        End While
    End Sub
    Private Delegate Sub TextUpdateHandler(ByVal n As Integer)
    Private Sub TextUpdate(ByVal n As Integer)
        TextBox1.Text = n.ToString()
    End Sub
End Class

Det taeller saa op med en start og stop knap.
Avatar billede thomas-k Nybegynder
02. april 2008 - 20:44 #4
takker, men puha hvor kompliceret for så lidt...
Avatar billede hmortensen Nybegynder
02. april 2008 - 21:06 #5
Du kan også bruge den indbyggede Timer control.
Avatar billede thomas-k Nybegynder
02. april 2008 - 21:13 #6
Hvorledes ville du anvende den? Jeg prøvede at sætte denne til 3000 millisekunder, og kalde den fra min løkke, men det hjalp ikke?
Avatar billede thomas-k Nybegynder
02. april 2008 - 22:21 #7
Ok, smider jeg en Application.DoEvents(); ind i toppen af løkken, så spiller det... Dog fatter jeg ikke at der ikke findes en delay() lignende ting, da Thread.Sleep lammer hele GUI som arne nævner :-(
Avatar billede arne_v Ekspert
03. april 2008 - 01:35 #8
Jeg har også et Timer eksempel. Og denne gang i C#:

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 E
{
    public partial class Form1 : Form
    {
        private Timer t;
        public Form1()
        {
            InitializeComponent();
            t = new Timer();
            t.Interval = 5000;
            t.Tick += new EventHandler(t_Tick);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "Bøh";
            t.Start();
        }
        void t_Tick(object sender, EventArgs e)
        {
            label1.Text = "";
            t.Stop();
        }
    }
}
Avatar billede thomas-k Nybegynder
04. april 2008 - 16:39 #10
Jeg takker for hjælpen arne. Jeg fik lavet den med sidstnævnte, selvom det tog lidt tid at brygge den sammen med en loop der køre 3 gange. Smider du ikke et svar til mig?
Avatar billede arne_v Ekspert
04. april 2008 - 17:22 #11
gerne

timer var dog hmortensens ide
Avatar billede hmortensen Nybegynder
04. april 2008 - 23:17 #12
Men det var dit eksempel ;)
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