C# Windows Phone闹铃不断地重新启动

C# Windows Phone闹铃不断地重新启动,c#,windows-phone-8,windows-phone,alarm,C#,Windows Phone 8,Windows Phone,Alarm,我正在尝试为Windows Phone编写一个闹钟应用程序,要求用户在闹钟响起时解决一个数学问题。现在我被卡住了,我的主页上有打开警报的设置,当警报响起时,用户被重定向到另一个xaml页面,该页面要求用户输入随机生成的数学问题的答案,以便关闭警报。我的问题是,一旦用户解决问题并点击复选框,应用程序应该首先将alarmSet值设置为false,然后将用户重定向回主页: private void Solve_Click(object sender, EventArgs e) {

我正在尝试为Windows Phone编写一个闹钟应用程序,要求用户在闹钟响起时解决一个数学问题。现在我被卡住了,我的主页上有打开警报的设置,当警报响起时,用户被重定向到另一个xaml页面,该页面要求用户输入随机生成的数学问题的答案,以便关闭警报。我的问题是,一旦用户解决问题并点击复选框,应用程序应该首先将alarmSet值设置为false,然后将用户重定向回主页:

private void Solve_Click(object sender, EventArgs e)
    {

        this.userSolve = Convert.ToInt32(answerInput.Text);
        if (userSolve != answer)
        {
            MessageBox.Show("Incorrect");
            //userAnswerInt = Convert.ToInt32(answerInput.Text);


        }

        else if (userSolve == answer)
        {
            MainPage.alarmSet.Value = false;
            NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        }


    }
然后,当用户到达主页面时,onload方法应该停止报警声音并将所有内容重置为正常:

public async void OnLoaded(object sender, EventArgs e)
    {

        this.timer.Stop();
        this.alarmSound.Stop();


        alarmSet.Value = false;
        this.notificationSwitch.IsChecked = alarmSet.Value;

        this.timePicker.Value = new DateTime(1, 1, 1,
                                             alarmTime.Value.Hours,
                                             alarmTime.Value.Minutes,
                                             0
                                             );



        if (alarmSet.Value == true)
            this.alarmTimeText.Text = alarmTimeString;
        else if (alarmSet.Value == false)
            this.alarmTimeText.Text = "alarm off";
但问题是,每次用户解决数学问题时,他们都会返回主页,并立即重定向回报警铃声页面,因为报警仍处于打开状态。这会创建一个相互重叠的无限报警循环,我不明白为什么,即使我将alarmSet.Value设置为false,在导航回主页面之前,报警仍然显示为打开。。。还有什么我需要做的吗?如何打开闹钟并将其设置为当前分钟,而不立即响起?

在Windows Phone的应用程序生命周期中,我没有看到“已加载”事件

参考:

您可以执行以下操作:

  • 在Mainpage.xaml中,查看报警是否正在运行,如果报警集为true,则将用户重定向到onNavigatedTo事件下的下一页

  • 在下一页中,将alarmSet设置为false并将用户重定向到MainPage.xaml。onNavigatedTo将再次被触发,但是,由于alarmSet为false,用户不会被重定向到任何地方。您可以在此处执行停止报警或其他任何操作


  • 感谢您的回复,我基于Windows Phone代码示例页面中的“带语音命令的闹钟”示例开发此应用程序。代码中已存在已加载的事件。起初,我将所有代码放在OnNavigatedTo事件中,但在调试之后,似乎在重定向回主页时,将运行OnNavigatedTo事件而不是OnNavigatedTo事件。我已经将alarmSet.Value设置为false,然后再导航回主页,由于某种原因,该报警仍被视为“打开”,基本上会重新触发报警。因此,出于某种原因,似乎在用户解决问题后,从报警铃声页面导航回主页时,主页被完全重新绘制,重新创建一切,就好像程序是第一次启动一样,而不仅仅是把它带回到前台。我如何导航到一个新页面并保持主页在后台运行?参考上的示例,onload事件仅在第一次应用程序启动时调用。请参阅:
    //注册语音命令。首次启动应用程序时调用。public async void onload(object sender,EventArgs e)
    看起来应该这样做,但例如,我在onload代码中添加了将我的时间选择器值设置为当前时间加上一小时,每次点击时间选择器更改时间,它带我回到主页,输入任何值加上一个小时。每次都会运行onload,如果我放弃整个onload方法,我会没事吗?我假设此行将加载时发生的任何事情路由到onload方法'this.onLoadedEventHandler=newRoutedEventHandler(onloaded);this.Loaded+=onLoadedEventHandler;'因此,如果我删除onloaded方法,应用程序会默认使用onNavigatedTo吗?