【问题标题】:LiveAuthClient InitializeAsync hangsLiveAuthClient InitializeAsync 挂起
【发布时间】:2013-09-19 17:34:16
【问题描述】:

我在使用 msdn 的演示时遇到问题

The demo

关于方法updateUserName

public static async Task updateUserName(TextBlock userName, Boolean signIn)
        {
            try
            {
                // Open Live Connect SDK client.
                LiveAuthClient LCAuth = new LiveAuthClient();
                LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
                try
                {
                    //this is never reached
                    LiveLoginResult loginResult = null;
                    if (signIn)
                    ......

代码挂在 ht InitialuzeAsync() 方法上,从不进入 try 语句。使用过实时 SDK 的人可以告诉我可能出了什么问题吗?该代码是从演示中直接复制粘贴的,实时 SDK 是通过 VS2012 上的 NuGet 安装的。

【问题讨论】:

    标签: c# live windows-store windows-live live-sdk


    【解决方案1】:

    我预测您正在调用Task.WaitTask<T>.Result 在调用堆栈的某个位置。正如我在博客中所描述的,您是 causing a deadlock,因为 await 正在尝试在 UI 线程上恢复。

    正确的解决方案是使用await“一路”,这是我在my article中描述的最佳实践之一。如果您认为自己“不能”使用await,请查看我的async/OOP blog series,它描述了async 代码的各种代码模式,最值得注意的是constructorsproperties

    【讨论】:

    • 我使用的(完整)代码在我提供的链接中。我检查了一下,没有Task.Wait,也没有Task.Result。挂起并不是指应用程序冻结 - 它仍然是响应式的。只是 LCAuth.InitializeAsync() 从未真正完成。
    【解决方案2】:

    看来您必须将您的应用与商店关联才能使用此功能,否则它会挂起。关联后,一切都开始工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2016-01-16
      • 2015-07-06
      相关资源
      最近更新 更多