Win8的Metro程序。有一个类,要实现一个接口,里面有一个int GetUserChoice()方法。
在UI界面中,需要弹出一个对话框,让用户选择,得到结果。但是对话框显示需要等待,不能返回int。这个功能需要怎么实现?相关代码:// 不能返回int public int GetUserChoice()
public async Task<int> GetUserChoice //但是这样又不能实现接口
{
    MessageDialog d = new MessageDialog("请选择:");
    d.Commands.Add(new UICommand("类型1", null, 1));
    d.Commands.Add(new UICommand("类型2", null, 2));
    d.Commands.Add(new UICommand("类型3", null, 3));
    IUICommand cmd = await d.ShowAsync();
    int choice = Convert.ToInt32(cmd.Id);
    return choice;
}

解决方案 »

  1.   

    public int GetUserChoice //但是这样又不能实现接口
    {
        MessageDialog d = new MessageDialog("请选择:");
        d.Commands.Add(new UICommand("类型1", null, 1));
        d.Commands.Add(new UICommand("类型2", null, 2));
        d.Commands.Add(new UICommand("类型3", null, 3));
        var task = d.ShowAsync();
        var result = task.WaitAndUnwrapException().Result;
        int choice = Convert.ToInt32(result.Id);
        return choice;
    }
      

  2.   

    http://stackoverflow.com/questions/12402681/is-it-possible-to-call-an-awaitable-method-in-a-non-async-method
      

  3.   

    sync要和await搭配使用。另外貌似sync需要带返回值的。
      

  4.   

    await TaskController.SendTaskAsync(client.Client, XmlTemplate.CreateRequestTemplate());public sync byte[] CreateRequestTemplate();
      

  5.   


    byte[] 不能作为异步方法的返回值的。