Avatar billede the-gnu.dk Nybegynder
09. september 2005 - 00:36 Der er 8 kommentarer

Starte og stoppe timer

Jeg har lavet en "pauseskærm"-agtig ting. Dvs. hver gang musen bevæges, smides der et MouseMoveEvent, som gør at jeg skal resette min timer.

Det er en System.Windows.Forms.Timer der er tale om. Det gør jeg på følgende måde:
 
  timer.Enable = false;
  timer.Enable = true;

På den måde nulstiller den tiden, og efter 5 min., kan pauseskærmen så begynde.

Problemet er her, at efter ca. 12-24 timer (afhængig af computer), sløver det hele meget. Jeg har læst mig frem til, at .Enable nok ikke er en property til det formål.

Nogen der har en anden idé til hvordan det kan laves uden det sløver programmet?
Avatar billede Lasse Novice
09. september 2005 - 01:03 #1
Proev at brug timer.Start() og timer.Stop() funktionerne istedet for.
Avatar billede Lasse Novice
09. september 2005 - 01:06 #2
Avatar billede the-gnu.dk Nybegynder
09. september 2005 - 06:49 #3
.Start() og .Stop() resetter ikke, dem stopper bare for en tid.
Ligeledes kan jeg heller ikke se, om den Win32 timer kan resettes?
Avatar billede Lasse Novice
09. september 2005 - 17:31 #4
Du skal ikke resette, men draebe timeren hver gang og kreere den paa ny.

Rent tilfaeldigt er jeg lige faldet over dette:

Microsoft.Win32.SystemEvents.CreateTimer
Microsoft.Win32.SystemEvents.InvokeOnEventsThread
Microsoft.Win32.SystemEvents.KillTimer

Jeg ved ikke om de virker eftersom dokumentationen skriver at det kun er til internt brug. Hvis ikke, saa skal du kigge paa foelgende API kald:

SetTimer
KillTimer
Avatar billede stig-b Nybegynder
11. september 2005 - 18:42 #5
Hej the-gnu.dk

Jeg lavede nogle timerfunktioner og havde en del problemer med at starte, stoppe, resette:

Her er en løsning, der virkede for mig (Jeg har kun taget det nødvendige kode med):

public class Form1
{
  private System.Windows.Forms.Timer timer;
  public Form1()
  {
      InitializeComponent();
      InitializeTimer();
  }

  private int counter = 0;
  private int timertick = 1000;
 
  private void InitalizeTimer()
  {
    counter = 0;
    timer.Interval = timertick;
    timer.Enabled = true;
    this.timer.Tick += new System.EventHandler(this.timer_Tick);
  }
  private void timer_Tick(object sender, System.EventArgs e)
  {
    counter++;
    txtCount.Text = counter.ToString();
  }
  private void btnTimerStop_Click(object sender, System.EventArgs e)
  {
    timer.Stop();
    timer.Dispose();
    counter = 0;
    txtCount.Text = "0";
  }
  private void btnRestartTimer_Click(object sender, System.EventArgs e)
  {
    timer.Start();
  } 
}

Måske det kan bruges.
stig-b
Avatar billede stig-b Nybegynder
11. september 2005 - 18:56 #6
I dit problem kunne counteren køre synkront med timeren, og så kunne du bruge stop timer, reset counter og start timer i forbindelse med dine mouse events.
Avatar billede the-gnu.dk Nybegynder
11. september 2005 - 21:41 #7
Hej...

Okay, måske også en måde at gøre det på. Jeg er kommet frem til, at jeg bruger System.Threading.Timer - den har en Change(int, int); metode, som er meget anvendelig, og den kan faktisk gøre tricket.
Avatar billede stig-b Nybegynder
12. september 2005 - 07:08 #8
Glæder mig at du har fundet en løsning :)
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