Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Timer

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.01.2006, 15:17 Uhr
Dark Listener



Ich versuch schon seit einiger Zeit, Fenster zum aufklappen zu bewegen. Nicht nur simples Aufklappen, sondern animiertes. Die Size wird in einem Timer mit 10ms um 1 vergrößert.
Nun ist ein Timer nicht Thread-Sicher. Sprich: Wenn die Größe der Form z.B. um die Hälfte erhöht wurde und dabei irgendein anderer Vorgang ausgeführt wird, wir der Timer unterbrochen.
Bei WINAPI gabs immer die gute alte Möglichkeit mit den System-Timern.
Hat jemand ne ahnung, wie man das elegant lösen könnte?
Gibts irgendeine thread-sichere Implementierung des Timers ?

Danke !
--
Look at my brand new Logo! And on the following page with my own tutorial there !!!
www.oyla7.de/cgi-bin/designs/medusa_schwarz/index.cgi?page=text&id=64301492&userid=89990972
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.01.2006, 18:23 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
System.Threading.Timer
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.01.2006, 21:32 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Dark Listener,
OK, hatte vorhin nicht viel Zeit. Noch ein Bsp.:
- 1 Label
- 1 TextBox
- 1 Button
In der Textbox wird der Sekundenwert eingegeben, wielange der Timer aktiv sein soll
Form1

C++:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

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

    
        public void UpdateLabel()
        {
            label1.BackColor = Color.Azure;
        }

        public void UpdateThis()
        {
            this.Width += 10;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int timeToRun = Int32.Parse(textBox1.Text);
            RunMyThread tr = new RunMyThread(this, timeToRun);
            Thread t = new Thread(new ThreadStart(tr.Start));
            t.Start();
        }
    }
}


Klasse RunMyThread

C++:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace ThreadRun
{
    class RunMyThread
    {
        private Form1 frm;
        private int wait;
        private System.Threading.Timer timer;

        public RunMyThread(Form1 frmMain, int waitSecond)
        {
            frm = frmMain;
            wait = waitSecond;
        }
        public void Start()
        {
            timer = new System.Threading.Timer(new TimerCallback(this.TimerElapsed), null, 1000, 1000);
            while (timer != null)
                Thread.Sleep(0);
        }
        private void TimerElapsed(object o)
        {
            wait--;
            frm.Invoke(new MethodInvoker(frm.UpdateThis));
            if (wait <= 0)
            {
                frm.Invoke(new MethodInvoker(frm.UpdateLabel));
                timer.Dispose();
                timer = null;
            }
        }
    }
}


Ohne Fehlerbehandlung!
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 05.01.2006 um 21:44 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: