gpt4 book ai didi

c# - 在 Silverlight 中创建倒数计时器

转载 作者:行者123 更新时间:2023-11-30 21:18:13 29 4
gpt4 key购买 nike

我想要一个从 60 秒倒数到 0 的计数器。我希望用户在 UI 上看到秒数。为此,我想我会显示一个基本的 TextBlock,如下所示:

<StackPanel>
<TextBlock Text=" " />
<TextBlock Text=" seconds remaining" />
</StackPanel>

然后我在考虑使用计时器。不过,我知道的唯一计时器是 DispatcherTimer。但是,这并没有显示已经过去了多少时间或还剩多少时间。因此,我没有任何东西可以绑定(bind)。

private DispatcherTimer myTimer = new DispatcherTimer();    
public MainPage() {
myTimer.Interval = new TimeSpan(0, 0, 60);
myTimer.Tick += new EventHandler(myTimer_Tick);
myTimer.Start();
}

我不知道该怎么做。一位同事告诉我,我什至不应该这样做,因为它会降低 UI 的速度。但用户确实需要它。谁能告诉我:

1) 它真的会让 UI 陷入如此深的泥潭吗?2) 如果没有,我该怎么做?

谢谢!

最佳答案

  1. 是的。它会以难以察觉的速度减慢它的速度。坦率地说,担心这个绝对是荒谬的。

  2. 在每次滴答时,递减一个属性。将您的 UI 绑定(bind)到该属性。或者,只需在每次滴答时使属性无效,并让属性 getter 计算剩余时间。

选项 1

myTimer.Interval = TimeSpan.FromSeconds(1);
myTimer.Tick += delegate
{
this.SecondsRemaining = this.SecondsRemaining - 1;

if (this.SecondsRemaining == 0)
{
myTimer.Dispose();
}
};
this.SecondsRemaining = 60;
myTimer.Start();

...

// assumes your class implements INotifyPropertyChanged and you have a helper method to raise OnPropertyChanged
public int SecondsRemaining
{
get { return this.secondsRemaining; }
private set
{
this.secondsRemaining = value;
this.OnPropertyChanged(() => this.SecondsRemaining);
}
}

选项 2

myTimer.Interval = TimeSpan.FromSeconds(1);
myTimer.Tick += delegate
{
this.OnPropertyChanged("TimeRemaining");

if (this.TimeRemaining <= 0)
{
myTimer.Dispose();
}
};
this.endTime = DateTime.UtcNow.AddMinutes(1);
myTimer.Start();

public int TimeRemaining
{
get { return (endTime - DateTime.UtcNow).TotalSeconds; }
}

关于c# - 在 Silverlight 中创建倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4339850/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com