0

クラスを使用して DateTime を変更し、TimeSpan を使用して X 時間、Y 分、Z 秒を DispatchTimer で毎秒 WPF ラベルに表示しています。コード自体は適切なタイムスパンを提供しますが、DispatchTimer は間違った出力を提供しています。ここで何が起こっているのかについての情報を得ることができますか?

ModifiedTime Minutes プロパティは、デバッグの中断中に引き続きクエリされます (ModifiedTime.Minutes にカーソルを合わせると、数値が増え続けます)。これは標準ですか?

ランタイム出力は 3 分で始まり、8 分、13、18、23、28 などと表示されます。

としょうかん:

public Clock() {
  load_ = DateTime.Now;
  time_ = new DateTime();
  time_ = DateTime.Now;
  modifiedTime_ = new DateTime();         
  modifiedTime_ = DateTime.Now;
  difference = TimeSpan.Zero;
}

public TimeSpan ModifiedTime {
  //Convert the real time to timespan.
  //display X Years, Y Days, Z Hours...
  get {
  modifiedTime_ = modifiedTime_.AddMinutes(1.0);
  difference = modifiedTime_.Subtract(time_);
  return difference;
  }
  set { difference = value; }
}

WPF:

DispatcherTimer dispatcherTimer; 
public MainWindow() {
  InitializeComponent();
  dispatcherTimer = new DispatcherTimer();
  dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
  dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
  dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e) {
  lblModTime.Content = clock.ModifiedTime.Hours + " hours, " + clock.ModifiedTime.Minutes + " minutes, " + clock.ModifiedTime.Seconds + " seconds, " + clock.ModifiedTime.Milliseconds + " milliseconds.";
}
4

2 に答える 2

1

私の理解が正しければ、経過した 1 秒ごとに開始時間に 1 分を追加する必要があります。したがって、差を秒単位で取り、それを新しい時間の開始時間に分として追加します。

public TimeSpan ModifiedTime
{
    get
    {
        TimeSpan elapsed = DateTime.Now - TimeStarted;
        return TimeStarted.AddMinutes(elapsed.TotalSeconds);
    }
}
于 2013-01-23T04:05:01.290 に答える
1

そうです、clock.ModifiedTime を呼び出すたびに。ディスパッチャーで (4 回!) 変更時刻に 1 分追加し、デバッガーでステートメントを評価するためにもう一度追加することもできます。これは、ディスプレイを毎回 5 ずつインクリメントすることを説明しています。

于 2013-01-23T04:06:00.213 に答える