OpenNetcf.StopWatch -> Só os carrapatos mudando, não decorridos
-
23-09-2019 - |
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)
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 lá Da versão 3.5 em diante ...