Xaml C#,UWP秒表延迟
我正在尝试为Windows10通用应用程序制作秒表功能。使用Dispatchermer,我已经能够得到一个工作的秒表,秒数将计到60,触发分钟加1,然后重置为零。秒将继续计数,但当它重置回零时会有1秒的延迟。基本上,当它达到60秒时,秒数重置为0,它在下一秒保持在0,然后在下一秒上升到1。你知道这是什么原因吗?非常感谢Xaml C#,UWP秒表延迟,c#,xaml,timer,uwp,stopwatch,C#,Xaml,Timer,Uwp,Stopwatch,我正在尝试为Windows10通用应用程序制作秒表功能。使用Dispatchermer,我已经能够得到一个工作的秒表,秒数将计到60,触发分钟加1,然后重置为零。秒将继续计数,但当它重置回零时会有1秒的延迟。基本上,当它达到60秒时,秒数重置为0,它在下一秒保持在0,然后在下一秒上升到1。你知道这是什么原因吗?非常感谢 public sealed partial class MainPage : Page { DispatcherTimer secondstimer = new Disp
public sealed partial class MainPage : Page
{
DispatcherTimer secondstimer = new DispatcherTimer();
int secondscount = 0;
int minutescount = 0;
int hourscount = 0;
public MainPage()
{
this.InitializeComponent();
secondstimer.Interval = new TimeSpan(0, 0, 1);
secondstimer.Tick += Secondstimer_Tick;
SecondsTextBlock.Text = "00";
MinutesTextBlock.Text = "00";
HoursTextBlock.Text = "00";
}
private void Secondstimer_Tick(object sender, object e)
{
SecondsTextBlock.Text = secondscount++.ToString();
if (secondscount == 61)
{
minutescount++;
secondscount = 0;
MinutesTextBlock.Text = minutescount.ToString();
SecondsTextBlock.Text = secondscount.ToString();
}
if (minutescount == 61)
{
hourscount++;
minutescount = 0;
MinutesTextBlock.Text = minutescount.ToString();
HoursTextBlock.Text = hourscount.ToString();
}
}
}
您可以消除复杂性,只需连续计算秒数,然后按如下方式设置文本块:
HoursTextBlock.Text = (secondscount / 3600).ToString();
MinutesTextBlock.Text = (secondscount % 3600) / 60).ToString();
SecondsTextBlock.Text = (secondscount % 60).ToString();
或者类似的东西。希望这有帮助。您也可以使用秒表课程 它会给你这样经过的时间
HoursTextBlock.Text = stopWatch.Elapsed.Hours.ToString();
MinutesTextBlock.Text = stopWatch.Elapsed.Minutes.ToString();
SecondsTextBlock.Text = stopWatch.Elapsed.Seconds.ToString();
我在60岁的时候买的,但它会提前一秒买!!!你是最棒的!非常感谢!现在一切正常。你知道为什么会有不同吗?很难说问题出在哪里,但是这个计时器不是100%准确的,而且你的代码也不是线程安全的。再次感谢!有没有更好的方法来实现这一点?如果您想要更高的准确性,可以读取每个回调中的System.Environment.TickCount值,并从中计算经过的秒数。
HoursTextBlock.Text = stopWatch.Elapsed.Hours.ToString();
MinutesTextBlock.Text = stopWatch.Elapsed.Minutes.ToString();
SecondsTextBlock.Text = stopWatch.Elapsed.Seconds.ToString();