面朝大海 春暖花开

天行健,君子以自强不息; 地势坤,君子以厚德载物; 宠辱不惊,闲看庭前花开花落; 去留无意,漫随天外云卷云舒。 不妄取,不妄予,不妄想,不妄求, 与人方便,随遇而安。 ——《周易》

导航

十六、异步编程——messagedialog

1、异步方法不用等任务结束后就可以返回。异步编程可以避免界面卡死的问题,但是会导致编写“等待一个异步操作执行完成再执行一段代码”的程序很麻烦。

2、在.net4.5中引入了async  await关键字,可以在异步方法调用前加入await关键字,这样方法中这一行之后的代码都将在异步方法执行完成后才执行。注意:一个方法中如果有await,则必须将方法中注明async。

3、可以直接在await前声明变量,当异步方法执行完成后把执行结果返回设置给变量,一般用var自动推断。

4、winRT中所有执行时间可能会比较长的操作都被微软强制设置为异步方法。

以MessageDialog为例

 //方法内部只要出现await,方法就要标注为async

        private async void Button_Click2(object sender, RoutedEventArgs e)

        {

            MessageDialog msg = new MessageDialog("hello");

            msg.Commands.Add(new UICommand("yes") { Id=1});

            msg.Commands.Add(new UICommand("no") { Id=2});

            //异步方法都可以用await关键字

            //只有等异步方法执行结束后,才继续往下执行,并且返回值中有执行结果。这就使得“好像同步”,但其实还是异步,只是编译器中的委托机制给我们的错觉

            var result = await msg.ShowAsync();

            if ((int)result.Id == 1)

            {

            }

            else if ((int)result.Id == 2)

            {

            }

            else

            {

            }

        }

另外还可以参照连接(创建自定义的MessageDialog):http://www.cppblog.com/DinoLegend/archive/2012/10/11/193184.aspx

posted on 2012-12-07 16:38  gentle_girl  阅读(372)  评论(0编辑  收藏  举报