异步操作后无法在输出窗口 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 表单中写入操作后,我在 iOS 中获得 BLE 配对请求对话框?