我有私人领域
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
在恐吓窗口内设置所以它不再为空并且 不再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
在异步方法里面做,就是这样,谢谢你们。