Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml C#,UWP秒表延迟_C#_Xaml_Timer_Uwp_Stopwatch - Fatal编程技术网

Xaml C#,UWP秒表延迟

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

我正在尝试为Windows10通用应用程序制作秒表功能。使用Dispatchermer,我已经能够得到一个工作的秒表,秒数将计到60,触发分钟加1,然后重置为零。秒将继续计数,但当它重置回零时会有1秒的延迟。基本上,当它达到60秒时,秒数重置为0,它在下一秒保持在0,然后在下一秒上升到1。你知道这是什么原因吗?非常感谢

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();