异步操作后无法在输出窗口 Xamarin 表单中显示输出

Posted

技术标签:

【中文标题】异步操作后无法在输出窗口 Xamarin 表单中显示输出【英文标题】:Cannot display output in Output Window Xamarin Forms after async operation 【发布时间】: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有问题,答案参考我上一个问题的答案***.com/a/58939243/8304176。 @JunedKhanMomin,请在三天后发表您的评论以回答并标记,这将对有类似问题的其他人有所帮助 【参考方案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 由于某种原因永远不会返回。

以上是关于异步操作后无法在输出窗口 Xamarin 表单中显示输出的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单 http 异步请求

为啥在 xamarin 表单中写入操作后,我在 iOS 中获得 BLE 配对请求对话框?

如何在 xamarin 表单 UWP 中使用 AppWindow 打开多个窗口?

显示带有 xamarin 表单的弹出窗口

在 Android Xamarin 表单上禁用自动位置权限

OxyPlot 未在 Xamarin 表单中显示