OpenNETCF.Stopwatch -> меняются только тики - PullRequest
2 голосов
/ 31 марта 2010

Я пытался отследить ошибку, которая, как мне казалось, была связана с потоками, но я думаю, что вместо этого есть проблема с тем, как я использую секундомер OpenNETCF. Я использую OpenNETCF.IoC в своем приложении, но для простоты я переместил следующий код непосредственно в представление:

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

Короче говоря, глядя на секундомер в отладчике, обновляются только значения ElapsedTicks, mElapsed, mStartPerfCount. Все остальное всегда ноль. Это ожидаемое поведение? Нужно ли вызывать дополнительный метод, чтобы секундомер вычислял структуру Elapsed? (Примечание: секундомер.ElapsedMilliseconds также равен нулю)

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Да, похоже, это ошибка, особенно в Stopwatch.cs, строка 136.

В настоящее время он читает:

smFreqInTicks = (MILLIS_IN_TICKS * 1000) / freq;

должно читаться следующим образом:

smFreqInTicks = (MILLIS_IN_TICKS * 1000d) / freq;

В данный момент smFreqInTicks всегда равен нулю, что убивает значения, которые вы просматриваете.

1 голос
/ 04 апреля 2010

Почему бы не использовать версию в самой Compact Framework? Это в там с версии 3.5 и далее ...

...