簡體   English   中英

如何使用倒數計時器從數分鍾內倒數秒

[英]How to countdown in seconds from minutes using a countdown timer

當前正在開發具有倒計時時間的簡單Windows Phone 8.1 Silverlight應用程序。 我可以在這里輸入設定的分鍾數,並且可以進行倒計時,但是我想讓用戶輸入分鍾數,然后從秒數開始倒數,例如,當前時間是10、9當輸入10秒時為8、7、6、5。

我想發生的是用戶輸入5,並且倒數如下:4:59 4:58 4:57

這是我當前的代碼:

    timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 1);
    timer.Tick += timer_Tick;
    basetime = Convert.ToInt32(tbxTime.Text);;
    tbxTime.Text = basetime.ToString();
    timer.Start();
}


void timer_Tick(object sender, object e)
{
    basetime = basetime - 1;
    tbxTime.Text = basetime.ToString();
    if (basetime == 0)
    {
        timer.Stop();
    }

如果僅將basetime TimeSpan而不是int則可以保留大多數現有代碼。 通過適當的靜態方法很容易從“分鍾”或“秒”設置其值。

var basetime = TimeSpan.FromMinutes(5);

然后您可以像這樣從中減去一秒鍾:

basetime -= TimeSpan.FromSeconds(1);

並顯示如下:

tbxTime.Text = basetime.ToString(@"m\:ss");

最后,將其與零進行比較也很簡單:

if (basetime <= TimeSpan.Zero)

有關更多顯示選項,請參見自定義TimeSpan格式字符串

我認為您可以利用TimeSpan類的適當格式(您肯定會在SO上找到許多示例 )。 簡單的示例如下所示(我假設您有一個用於輸入時間的TextBox和一個顯示計數器的TextBlock );

DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(1) };
TimeSpan time;
public MainPage()
{
    this.InitializeComponent();
    timer.Tick += (sender, e) =>
        {
            time -= TimeSpan.FromSeconds(1);
            if (time <= TimeSpan.Zero) timer.Stop();
            myTextBlock.Text = time.ToString(@"mm\:ss");
        };
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{ time = TimeSpan.FromMinutes(int.Parse((sender as TextBox).Text)); }

private void startBtn_Click(object sender, RoutedEventArgs e)
{ timer.Start(); }

請注意,這是一個非常簡單的示例。 您還應該考慮DispatcherTimer是一個好主意-它可以在分派器上運行,因此,如果您在主UI線程上運行了一些繁重的工作,則可能無法正確計算時間。 在這種情況下,您可能會考慮使用其他計時器,例如System.Threading.Timer ,它在單獨的線程上運行,因此您必須通過Dispatcher更新UI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM