C# IAsyncInfo Cancel方法适用于windows 8,但不适用于windows phone 8.1

C# IAsyncInfo Cancel方法适用于windows 8,但不适用于windows phone 8.1,c#,multithreading,xaml,windows-phone-8.1,C#,Multithreading,Xaml,Windows Phone 8.1,好的,我正在阅读Charles Petzold编程Windows第六版,但正在应用 改为将其安装到windows phone 8.1中。 目前我正在阅读关于异步的第7章 我尝试执行下面适用于Windows 8应用程序的源代码。 在这种情况下,对话框会弹出5秒钟并自动关闭。 但令人恼火的是,在Windows Phone 8.1上,同样的源代码编译得很好,运行也很好。 但是,对话框弹出窗口保持可见 我相信windows 8和windows phone 8应用程序之间的线程工作方式有一些不同。 注意:

好的,我正在阅读Charles Petzold编程Windows第六版,但正在应用
改为将其安装到windows phone 8.1中。
目前我正在阅读关于异步的第7章

我尝试执行下面适用于Windows 8应用程序的源代码。
在这种情况下,对话框会弹出5秒钟并自动关闭。
但令人恼火的是,在Windows Phone 8.1上,同样的源代码编译得很好,运行也很好。
但是,对话框弹出窗口保持可见

我相信windows 8和windows phone 8应用程序之间的线程工作方式有一些不同。 注意:仅供参考,我在emulator中测试了这段代码

public sealed partial class MainPage : Page
{

    IAsyncOperation<IUICommand> asyncOp;

    async void Button_ClickCancel(object sender, RoutedEventArgs args)
    {
        MessageDialog msgdlg = new MessageDialog("Choose a color", "How To Async #3");
        msgdlg.Commands.Add(new UICommand("Red", null, Colors.Red));
        msgdlg.Commands.Add(new UICommand("Blue Violet", null, Colors.BlueViolet));

        //Start a 5 second timer
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(5);
        timer.Tick += OnTimerTick;
        timer.Start();

        asyncOp = msgdlg.ShowAsync();
        IUICommand command = null;

        try
        {
           command = await asyncOp;

        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine("exception:[" + e.Message + "]");
        }
        System.Diagnostics.Debug.WriteLine("##Before time.Stop()");
        //Stop the timer
        timer.Stop();

        //If the operation was cancelled, exit the method
        if (command == null)
        {
            return;
        }

        //Get the color value and set the background brush
        Color clr = (Color)command.Id;
        ContentGrid.Background = new SolidColorBrush(clr);
    }

    void OnTimerTick(object sender, object args)
    {
            asyncOp.Cancel();

    }
}
公共密封部分类主页面:第页
{
IAsyncOperation异步操作;
异步无效按钮\u单击取消(对象发送方、RoutedEventArgs参数)
{
MessageDialog msgdlg=newmessagedialog(“选择颜色”、“如何异步3”);
添加(新的UICommand(“红色”,null,Colors.Red));
添加(新的UICommand(“蓝紫色”,null,Colors.BlueViolet));
//启动5秒计时器
调度程序计时器=新调度程序();
timer.Interval=从秒开始的时间跨度(5);
timer.Tick+=OnTimerTick;
timer.Start();
asyncOp=msgdlg.ShowAsync();
IUICommand命令=null;
尝试
{
命令=等待异步操作;
}
捕获(例外e)
{
System.Diagnostics.Debug.WriteLine(“异常:[“+e.Message+”]”);
}
System.Diagnostics.Debug.WriteLine(“##Before time.Stop()”;
//停止计时
timer.Stop();
//如果操作已取消,请退出该方法
如果(命令==null)
{
回来
}
//获取颜色值并设置背景笔刷
Color clr=(Color)command.Id;
ContentGrid.Background=新的SolidColorBrush(clr);
}
void OnTimerTick(对象发送方、对象参数)
{
asyncOp.Cancel();
}
}

我认为这更多的是因为MessageDialog中的差异,而不是cancel not working中的差异。