私はプライベートフィールドを持っています
private DateTime? StartTime;
ボタンクリックでそのフィールドを設定しています
private void btnStart_Click(object sender, RoutedEventArgs e)
{
StartTime = DateTime.Now;
}
しかし、EventHandler からそのフィールドにアクセスしているとき
private void InitTimers()
{
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += DispatcherTimer_Tick;
dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
dispatcherTimer.Start();
}
private void DispatcherTimer_Tick(object sender, EventArgs e)
{
lbTime.Content = DateTime.Now.ToString("HH:mm:ss");
lbTodayDate.Content = DateTime.Now.ToString("MM/dd/yyyy");
if(StartTime != null) //Always null
lbElipsedTime.Content = DateTime.Now - StartTime;
CommandManager.InvalidateRequerySuggested();
}
StartTime
常に残るnull
誰かがそれを説明できるでしょうか?
InitTimmers
プログラムの開始時にパブリックMainWindow()
デフォルトコンストラクター内で呼び出されます。
ボタンのクリックが発火し、タイマーがカチカチ音をたてる、私はそれを確認しました。ボタン クリックでは にStartTime
初期化されるDateTime.Now
ため、null と等しくありませんが、タイマー ティックでは null と等しくなります。テストのStartTime
ために、脅迫ウィンドウ内に設定したので、nullではなく、式 はもうif(StartTime != null)
ありませfalse
ん
アップデート
わかりました私は愚かなことをしました、私は非同期メソッドを実行しています、キーはそこにあります:
private void btnStart_Click(object sender, RoutedEventArgs e)
{
StartTime = DateTime.Now;
DoAsyncMethod(); //should do StartTime = null inside.
StartTime = null
}
非同期メソッド内で行う必要がありStartTime = null
ます。つまり、ありがとうございます。