2013-06-19 113 views
0

我正在嘗試使倒數計時器顯示剩餘的特定日期的總天數,小時數,分鐘數和秒數。倒數計時器到特定日期

這就是我現在創建的。

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:

我已經使用定時器,它的計數爲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)); 

    } 

回答

0

問題解決了剛添加RunOnUiThread內tmr_Elapsed

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)); 
    }); 
} 
1

在C#中使用Timer類並將其設置爲1秒。