OpenNETCF.Секундомер -> меняются только тики, а не истекшие
-
23-09-2019 - |
Вопрос
Я пытался отследить ошибку, которая, как мне казалось, была связана с потоком, но я думаю, что вместо этого есть проблема с тем, как я использую секундомер 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();
}
...
}
Короче говоря, глядя на stopwatch в отладчике, единственные значения, которые когда-либо обновляются, - это ElapsedTicks, mElapsed, mStartPerfCount .Все остальное всегда равно нулю.Является ли это ожидаемым поведением?Нужно ли мне вызывать дополнительный метод, чтобы секундомер вычислял прошедшую структуру?(Примечание:секундомер.Истекшие миллисекунды также равны нулю)
Решение
Да, похоже, это ошибка, особенно в Stopwatch.cs, строка 136.
В настоящее время он гласит:
smFreqInTicks = (MILLIS_IN_TICKS * 1000) / freq;
он должен гласить:
smFreqInTicks = (MILLIS_IN_TICKS * 1000d) / freq;
Прямо сейчас smFreqInTicks всегда оказывается равным нулю, что уничтожает значения, на которые вы смотрите.
Другие советы
Почему бы не использовать версию в самой Compact Framework?Это в там начиная с версии 3.5 и далее...