Pergunta

Eu tenho tentado rastrear um bug que eu pensei estar relacionado ao fio, mas acho que há um problema com a maneira como estou usando o StopWatch do OpenNetCF. estou usando OpenNetcf.ioc No meu aplicativo, mas, por uma questão de simplicidade, movi o seguinte código diretamente para uma visualização:

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();
  }
  ...
}

Para encurtar a história, olhando para o stopwatch no depurador, os únicos valores que já são atualizados são os trocados, melapsiados, mstartperfcount. Todo o resto é sempre zero. Esse comportamento esperado? Preciso chamar um método adicional para que o cronômetro calcule a estrutura decorrida? (Nota: StopWatch.ElapsedMillisEconds também é zero)

Foi útil?

Solução

Sim, parece ser um bug, especificamente no Stopwatch.cs, linha 136.

Atualmente diz:

smFreqInTicks = (MILLIS_IN_TICKS * 1000) / freq;

deve ler:

smFreqInTicks = (MILLIS_IN_TICKS * 1000d) / freq;

No momento, o smfreqinticks acaba sendo sempre zero, o que mata os valores que você está olhando.

Outras dicas

Por que não usar a versão na própria estrutura compacta? Está dentro Da versão 3.5 em diante ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top