Question

J'ai essayé de traquer un bug que je pensais était lié à fil, mais je pense plutôt qu'il ya un problème avec la façon dont je me sers de Chronomètre OpenNETCF. J'utilise OpenNETCF.IoC dans ma demande, mais pour des raisons de simplicité je me suis déplacé le code suivant directement dans un vue:

public partial class WorkoutView : SmartPart
{
 ...
 private Stopwatch stopwatch; 
 public WorkoutView()
 {  ...
    stopwatch = new Stopwatch();
    stopwatch.Reset();
    stopwatch.Start(); 

    WorkoutDisplayTimer = new Timer();
    WorkoutDisplayTimer.Interval = 500;
    WorkoutDisplayTimer.Tick += new EventHandler(WorkoutDisplayTimer_Tick);
    WorkoutDisplayTimer.Enabled = true;
 }
 void WorkoutDisplayTimer_Tick(object sender, EventArgs e)
 { ...
   stopwatch.Stop();
   lbl.Text = stopwatch.ElapsedTicks.ToString() + "NOT WORKING: " + stopwatch.Elapsed.ToString();
   stopwatch.Start();
  }
  ...
}

Longue histoire courte, regardant le chronomètre dans le débogueur, les seules valeurs qui se sont mis à jour jamais ElapsedTicks, mElapsed, mStartPerfCount. Tout le reste est toujours égale à zéro. Est-ce comportement attendu? Ai-je besoin d'appeler une méthode supplémentaire pour avoir le chronomètre calculer le struct écoulé? (Note: stopwatch.ElapsedMilliseconds est zéro)

Était-ce utile?

La solution

Oui, il semble y avoir un bug, plus précisément dans Stopwatch.cs, ligne 136.

Il se lit actuellement:

smFreqInTicks = (MILLIS_IN_TICKS * 1000) / freq;

il faut lire:

smFreqInTicks = (MILLIS_IN_TICKS * 1000d) / freq;

En ce moment smFreqInTicks finit par être toujours égale à zéro, ce qui tue les valeurs que vous regardez.

Autres conseils

Pourquoi ne pas utiliser la version dans le Compact Framework lui-même? Il est dans il à partir de la version 3.5 ... partir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top