2

我一直在试图找出一个我认为与线程相关的错误,但我认为我使用 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 也为零)

4

2 回答 2

2

是的,这似乎是一个错误,特别是在 Stopwatch.cs 的第 136 行中。

目前内容如下:

smFreqInTicks = (MILLIS_IN_TICKS * 1000) / freq;

它应该是:

smFreqInTicks = (MILLIS_IN_TICKS * 1000d) / freq;

现在 smFreqInTicks 最终总是为零,这会杀死您正在查看的值。

于 2010-04-01T04:22:47.533 回答
1

为什么不使用 Compact Framework 本身的版本呢?它从 3.5 版开始就在那里......

于 2010-04-03T23:29:20.570 回答