【问题标题】:Cannot display output in Output Window Xamarin Forms after async operation异步操作后无法在输出窗口 Xamarin 表单中显示输出
【发布时间】:2020-03-14 04:44:29
【问题描述】:

我有一个代码,我在其中请求位置权限,并且我想显示用户是否拒绝或授予权限的输出。无论用户是否授予或拒绝了权限,我都没有得到任何输出。我也在 Manifest 中指定了权限。

这是我的代码:

void AskPermissionNew(object sender, EventArgs e)
{
    Task.Run(async () =>
    {
        var permissionStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
        if (permissionStatus != PermissionStatus.Granted)
        {
            var response = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
            var userResponse = response[Permission.Location];

            Debug.WriteLine($"Permission {Permission.Location} {userResponse}");   // I cannot display output here
        }
        else
        {
            Debug.WriteLine($"2 Permission {Permission.Location} {permissionStatus}");
        }
    });
}

【问题讨论】:

  • 你为什么post this again
  • @GabrielLuci,这是不同的问题,在这里我使用等待后没有得到任何输出。在上一个问题上,等待后我无法获得位置。基本上这是我面临的普遍问题。
  • 当我在 Google 上搜索 "RequestPermissionsAsync" 时,我看到很多关于它根本没有返回的投诉。所以这可能是你问题的根源。您是否尝试过调试并单步执行代码以查看 RequestPermissionsAsync 是否真的返回?
  • 是的,我觉得RequestPermissionsAsync有问题,答案参考我上一个问题的答案stackoverflow.com/a/58939243/8304176
  • @JunedKhanMomin,请在三天后发表您的评论以回答并标记,这将对有类似问题的其他人有所帮助

标签: c# xamarin xamarin.forms async-await


【解决方案1】:

您的第一个await 可能会抛出一个保持沉默的Exception,因为您没有等待Task.Run 的结果,因此不会重新抛出异常。

如果你写:

async Task AskPermissionNew(object sender, EventArgs e)
{
    try
    {
        await Task.Run(async () =>
        {
            /* ... */
        });
    }
    except (Exception e)
    {
        Debug.Print(e.ToString());
    }
}

void AskPermissionNew(object sender, EventArgs e)
{
    Task.Run(async () =>
    {
        try
        {
            var permissionStatus = await /* ... */
        }
        except (Exception e)
        {
            Debug.Print(e.ToString());
        }
    });
}

您可能会看到您当前默默忽略的Exception 的打印输出。

【讨论】:

  • 我仍然没有得到任何输出作为异常。我试图在 try catch 中捕获异常。但是没有抛出异常。
  • 所以我同意 Gabriel Luci 的观点,即您的第一个 await 由于某种原因永远不会返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2013-12-26
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多