WPF日期时间,不跳秒

Hanwen680 / 2023-05-08 / 原文

WPF显示日期时间,不跳秒

标签: C# ; WPF ;

博主新人,学习记录,请多指点。


  • 常规: 利用DispatcherTimer实例,通过Tick时间每间隔一秒调用一次timer_Tick方法(自定义),即输出一次日期、时间。通过RaisePropertyChanged(//prism)通知到前端。
public class MainWindowViewModel : BindableBase
    {
    public MainWindowViewModel()
        {            
            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = new TimeSpan(0, 0, 0, 1);//一秒间隔
            timer.Tick += timer_Tick;
            timer.IsEnabled = true;//使能
            
        }
        /**************************************************************/
        /*当前日期*/
        private string _DateNow;
        public string DateNow
        {
            get { return _DateNow; }
            set { _DateNow = value; RaisePropertyChanged(); }
        }
        /*当前时间*/
        private string _TimeNow;
        public string TimeNow
        {
            get { return _TimeNow; }
            set { _TimeNow = value; RaisePropertyChanged(); }
        }
        /*事件处理器*/
         private void timer_Tick(object sender, EventArgs e)
        {
            DateNow = DateTime.Now.ToString("yyyy-MM-dd ");
            TimeNow = DateTime.Now.ToString("HH:mm:ss");
        }
    }
  • 注意: .NET只保证Tick事件 不会提前执行,但不保证其会及时执行 ,所以有一定概率会出现 “跳秒” ,所以可为DispatcherTimer设置高优先级(按需)。如下:
/**********原构造函数修改为:**********/
  public MainWindowViewModel()
      {            
          var priority=new DispatcherPriority();
          priority = DispatcherPriority.Send;//设置优先级为最高(按需)
          DispatcherTimer timer = new DispatcherTimer(priority);
          timer.Interval = new TimeSpan(0, 0, 0, 1);
          timer.Tick += timer_Tick;
          timer.IsEnabled = true;            
      }
  • 前端代码如下:
<TextBlock
      Grid.Column="1"
      HorizontalAlignment="Center"
      VerticalAlignment="Center"
      FontSize="18"
      Text="{Binding TimeNow}" />
<TextBlock
      Grid.Column="2"
      HorizontalAlignment="Center"
      VerticalAlignment="Center"
      FontSize="18"
      Text="{Binding DateNow}" />
  • 效果如下
    img