【问题标题】:Countdown timer to specific date倒计时到特定日期
【发布时间】:2013-06-15 15:17:08
【问题描述】:

我正在尝试制作一个倒计时计时器,显示特定日期剩余的天数、小时数、分钟数和秒数。

这就是我到目前为止所创建的。

protected override void OnCreate (Bundle bundle)
{
  base.OnCreate (bundle);


  SetContentView (Resource.Layout.Main);

  txtDays = FindViewById<TextView> (Resource.Id.txtDays);
  txtHours = FindViewById<TextView> (Resource.Id.txtHours);
  txtMins = FindViewById<TextView> (Resource.Id.txtMins);
  txtSec = FindViewById<TextView> (Resource.Id.txtSec);

  DateTime enteredDate = new DateTime(2013, 7, 25, 12 ,30 ,00);

  DateTime todaysDateTime = DateTime.Now;
  DateTime formattedDate = todaysDateTime.AddHours (2);

  TimeSpan span = enteredDate.Subtract(formattedDate);

  double totalDays = span.TotalDays;
  double totalHours = span.TotalHours;
  double totalMins = span.TotalMinutes;
  double totalSec = span.TotalSeconds;

  new Thread(new ThreadStart(() =>
                             {
    RunOnUiThread(() =>
                  {
      Console.WriteLine ("Days: " + String.Format("{0:0}", Math.Truncate(totalDays)));
      Console.WriteLine ("Hours: " + String.Format("{0:0}", Math.Truncate(totalHours)));
      Console.WriteLine ("Minutes: " + String.Format("{0:0}", Math.Truncate(totalMins)));
      Console.WriteLine ("Seconds: " + String.Format("{0:0}", Math.Truncate(totalSec)));

      txtDays.Text = String.Format ("{0:0}", Math.Truncate (totalDays));
      txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
      txtMins.Text = String.Format ("{0:0}", Math.Truncate (totalMins));
      txtSec.Text = String.Format ("{0:0}", Math.Truncate (totalSec));

  });
  })).Start();  

}

如何使用 Android C# 每秒自动更新 TextViews?

编辑 2:

我使用了 Timer,它与 Console.WriteLine 一起计数,但 TextViews 什么都不显示,并且它们不更新...有人知道如何每秒更新 TextViews 吗?

timer = 0;
      new Thread(new ThreadStart(() =>
                                 {
      Thread.Sleep (1000);
        RunOnUiThread(() =>
                      {
      tmr.Elapsed += new System.Timers.ElapsedEventHandler(tmr_Elapsed);
      tmr.Start();
      while (timer < totalSec) ;
      tmr.Stop();

        });
      })).Start(); 

void tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
      txtDays = FindViewById<TextView> (Resource.Id.txtDays);
      txtHours = FindViewById<TextView> (Resource.Id.txtHours);
      txtMins = FindViewById<TextView> (Resource.Id.txtMins);
      txtSec = FindViewById<TextView> (Resource.Id.txtSec);

      DateTime enteredDate = new DateTime(2013, 7, 25, 12 ,30 ,00);

      DateTime todaysDateTime = DateTime.Now;
      DateTime formattedDate = todaysDateTime.AddHours (2);

      TimeSpan span = enteredDate.Subtract(formattedDate);

      totalDays = span.TotalDays;
      totalHours = span.TotalHours;
      totalMins = span.TotalMinutes;
      totalSec = span.TotalSeconds;

      Console.WriteLine ("Days: " + String.Format("{0:0}", Math.Truncate(totalDays)));
      Console.WriteLine ("Hours: " + String.Format("{0:0}", Math.Truncate(totalHours)));
      Console.WriteLine ("Minutes: " + String.Format("{0:0}", Math.Truncate(totalMins)));
      Console.WriteLine ("Seconds: " + String.Format("{0:0}", Math.Truncate(totalSec)));

      txtDays.Text = String.Format ("{0:0}", Math.Truncate (totalDays));
      txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
      txtMins.Text = String.Format ("{0:0}", Math.Truncate (totalMins));
      txtSec.Text = String.Format ("{0:0}", Math.Truncate (totalSec));

    }

【问题讨论】:

    标签: c# android timer countdown


    【解决方案1】:

    在 C# 中使用 Timer 类并将其设置为 1 秒。

    【讨论】:

      【解决方案2】:

      问题已解决,刚刚在 tmr_Elapsed 中添加了 RunOnUiThread

      void tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
      {
        RunOnUiThread(() =>
                      {
        txtDays = FindViewById<TextView> (Resource.Id.txtDays);
        txtHours = FindViewById<TextView> (Resource.Id.txtHours);
        txtMins = FindViewById<TextView> (Resource.Id.txtMins);
        txtSec = FindViewById<TextView> (Resource.Id.txtSec);
      
        DateTime enteredDate = new DateTime(2013, 7, 25, 12 ,30 ,00);
      
        DateTime todaysDateTime = DateTime.Now;
        DateTime formattedDate = todaysDateTime.AddHours (2);
      
        TimeSpan span = enteredDate.Subtract(formattedDate);
      
        totalDays = span.TotalDays;
        totalHours = span.TotalHours;
        totalMins = span.TotalMinutes;
        totalSec = span.TotalSeconds;
      
        Console.WriteLine ("Days: " + String.Format("{0:0}", Math.Truncate(totalDays)));
        Console.WriteLine ("Hours: " + String.Format("{0:0}", Math.Truncate(totalHours)));
        Console.WriteLine ("Minutes: " + String.Format("{0:0}", Math.Truncate(totalMins)));
        Console.WriteLine ("Seconds: " + String.Format("{0:0}", Math.Truncate(totalSec)));
      
      
        txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
        txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
        txtMins.Text = String.Format ("{0:0}", Math.Truncate (totalMins));
        txtSec.Text = String.Format ("{0:0}", Math.Truncate (totalSec));
        });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多