由于捕获的异常,显示消息对话框的正确方法是什么?
我最初尝试过
try
{
await DoSomething();
}
catch(InvalidOperation ex)
{
await MessageDialog(ex.Message).ShowAsync();
}
catch(CommunicationException)
{
await MessageDialog(StringResourceLoader.LoginError).ShowAsync();
}
这不起作用,因为您不能await
在 try 块内。取出 await 命令会使编译器显示以下警告:
由于不等待此调用,因此在调用完成之前继续执行当前方法。考虑将“等待”运算符应用于调用结果
我不喜欢在我的代码中保留这些警告,因为在某些地方人们忘记了使用await
,因此很难找到错误。
更改消息对话框语句以var task = new MessageDialog(ex.Message).ShowAsync().AsTask();
消除所有警告和错误,但我不确定这是解决它的好方法(技术上很糟糕,原因与它希望我await
打电话的原因相同)
最后,我尝试在 catch 之外存储异常并执行我的逻辑来向用户显示什么(包括确定抛出什么类型的异常的所有逻辑),通过:
Exception thrownException = null;
try
{
await DoSomething();
}
catch(Exception ex)
{
thrownException = ex;
}
if (thrownException is InvalidOperationException)
await MessageDialog(ex.Message).ShowAsync();
else if (thrownException is CommunicationException)
await MessageDialog(StringResourceLoader.LoginError).ShowAsync();
我不确定我是否觉得这是最好的方法。有什么想法应该怎么做?