【问题标题】:await x.ShowAsync(); shown in Windows Phone 8.1 app Error等待 x.ShowAsync();显示在 Windows Phone 8.1 应用程序错误中
【发布时间】:2015-05-07 11:16:33
【问题描述】:

在函数中使用“await”操作符时会抛出异常,如下所示:

“await”运算符只能在异步方法中使用。 考虑使用“异步”修饰符标记此方法并将其返回类型更改为“任务”。

private void Button_Click(object sender, RoutedEventArgs e)
{
    try
    {
        int snooze;
        string audioSrc;
        int year = datepicker.Date.Year;
        int month = datepicker.Date.Month;
        int day = datepicker.Date.Day;
        int hour = timepicker.Time.Hours;
        int min = timepicker.Time.Minutes;
        int sec = timepicker.Time.Seconds;
        //   string audioSrc = alrm_sound.SelectionBoxItem.ToString();
        try
        {
            snooze = Convert.ToInt16(CustomSnoozeTime.SelectionBoxItem.ToString());
        }
        catch
        {
            snooze = 5;
        }
        try
        {
            audioSrc = alrm_sound.SelectionBoxItem.ToString();
        }
        catch
        {
            audioSrc = "Default";
        }
        DateTime myDate1 = new DateTime(year, month, day, hour, min, sec);

        DateTime myDate2 = DateTime.Now;
        TimeSpan myDateResult = new TimeSpan();
        myDateResult = myDate1 - myDate2;
        if (myDate2 > myDate1)
        {
            var x = new MessageDialog("Invalid date or time");
            await x.ShowAsync();
        }
        else
        {
            string title = "Alarm!";
            string message = alm_msg.Text;
            string imgURL = "ms-appx:///Assets/Capture.PNG";

            string toastXmlString =
             "<toast><visual version='1'><binding template='toastImageAndText02'><text id='1'>"
           + title + "</text><text id='2'>"
                + message + "</text><image id='1' src='" + imgURL + "'/></binding></visual>\n" +
                 "<commands scenario=\"alarm\">\n" +
                    "<command id=\"snooze\"/>\n" +
                    "<command id=\"dismiss\"/>\n" +
                "</commands>\n" +
                      "<audio src='ms-winsoundevent:Notification." + audioSrc + "'/>" +
                "</toast>";

            Windows.Data.Xml.Dom.XmlDocument toastDOM = new Windows.Data.Xml.Dom.XmlDocument();
            toastDOM.LoadXml(toastXmlString);
            var toastNotifier1 = Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier();

            double x1 = myDateResult.TotalSeconds;
            int customSnoozeSeconds = snooze * 60;

            TimeSpan snoozeInterval = TimeSpan.FromSeconds(customSnoozeSeconds);

            var customAlarmScheduledToast = new Windows.UI.Notifications.ScheduledToastNotification(toastDOM, DateTime.Now.AddSeconds(x1), snoozeInterval, 0);

            toastNotifier1.AddToSchedule(customAlarmScheduledToast);
            var x = new MessageDialog("Alarm Set!");
            await x.ShowAsync();
        }
    }
    catch
    { }
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    try
    {
        int snooze;
        string audioSrc;
        int year = datepicker.Date.Year;
        int month = datepicker.Date.Month;
        int day = datepicker.Date.Day;
        int hour = timepicker.Time.Hours;
        int min = timepicker.Time.Minutes;
        int sec = timepicker.Time.Seconds;
        //   string audioSrc = alrm_sound.SelectionBoxItem.ToString();
        try
        {
            snooze = Convert.ToInt16(CustomSnoozeTime.SelectionBoxItem.ToString());
        }
        catch
        {
            snooze = 5;
        }
        try
        {
            audioSrc = alrm_sound.SelectionBoxItem.ToString();
        }
        catch
        {
            audioSrc = "Default";
        }
        DateTime myDate1 = new DateTime(year, month, day, hour, min, sec);

        DateTime myDate2 = DateTime.Now;
        TimeSpan myDateResult = new TimeSpan();
        myDateResult = myDate1 - myDate2;
        if (myDate2 > myDate1)
        {
            var x = new MessageDialog("Invalid date or time");
            await x.ShowAsync();
        }
        else
        {
            string title = "Alarm!";
            string message = alm_msg.Text;
            string imgURL = "ms-appx:///Assets/Capture.PNG";

            string toastXmlString =
             "<toast><visual version='1'><binding template='toastImageAndText02'><text id='1'>"
           + title + "</text><text id='2'>"
                + message + "</text><image id='1' src='" + imgURL + "'/></binding></visual>\n" +
                 "<commands scenario=\"alarm\">\n" +
                    "<command id=\"snooze\"/>\n" +
                    "<command id=\"dismiss\"/>\n" +
                "</commands>\n" +
                      "<audio src='ms-winsoundevent:Notification." + audioSrc + "'/>" +
                "</toast>";

            Windows.Data.Xml.Dom.XmlDocument toastDOM = new Windows.Data.Xml.Dom.XmlDocument();
            toastDOM.LoadXml(toastXmlString);
            var toastNotifier1 = Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier();

            double x1 = myDateResult.TotalSeconds;
            int customSnoozeSeconds = snooze * 60;

            TimeSpan snoozeInterval = TimeSpan.FromSeconds(customSnoozeSeconds);

            var customAlarmScheduledToast = new Windows.UI.Notifications.ScheduledToastNotification(toastDOM, DateTime.Now.AddSeconds(x1), snoozeInterval, 0);

            toastNotifier1.AddToSchedule(customAlarmScheduledToast);
            var x = new MessageDialog("Alarm Set!");
            await x.ShowAsync();
        }
    }
    catch
    { }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow。您的问题没有任何图像。它也没有任何代码和解释。请阅读FAQHow to Askhelp center 作为开始..
  • 等待 x.ShowAsync();该方法错误给出

标签: c# windows c#-4.0 windows-phone-8 windows-phone-8.1


【解决方案1】:

在方法的声明中添加“async”关键字。

例如,如果您的方法类似于 -

public void MyMethod()
{
    await x.ShowAsync();
}

这样改——

public async void MyMethod()
{
    await x.ShowAsync();
}

更新:-

另外,如果你的方法返回一个值/对象,这样做 -

public async Task<int> MyMethod()
{
    int i = await x.ShowAsync();
    return i;
}

更新:-

改变你的功能如下-

private void Button_Click(object sender, RoutedEventArgs e)

把这个改成-

private async void Button_Click(object sender, RoutedEventArgs e)

【讨论】:

  • @KilerJutt 我需要更多信息和更多代码。我必须看到你的代码来帮助你。请“编辑”您的问题并提供更多信息。
【解决方案2】:

您需要将async 修饰符添加到Button_Click 方法,如下所示:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    // rest of code
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多