【问题标题】:The system crashes and can not display the error message系统崩溃,无法显示错误信息
【发布时间】:2014-03-01 17:02:43
【问题描述】:

假设代码正确且发生 webservice 超时。

问题:

  1. 系统崩溃,无法显示错误信息。

如何显示错误信息?那么当出现错误时,我可以为用户提供替代方案吗?

1) 我在项目中添加了这个类: 公共课 MyClass { 公共静态异步任务 LogInSuccess() { 尝试 { -- 在此处调用 Web 服务 } 捕捉(System.Exception _ex) { _strErrorMsg = _ex.InnerException.Message; 抛出新异常(“LogInSuccess()” + _strErrorMsg); } } } --- 在主页中, 2) 私人异步无效设置() { -- 执行设置任务的代码-- 调用WebSvc(); } 3) 私人无效CallWebSvc() { 布尔显示错误 = 假; System.Exception MyException = new Exception(); 尝试 { -- 通过 MyClass 调用 Web 服务 System.Threading.Tasks.Task _blnLogInSuccess = MyClass.LogInSuccess(); 等待_blnLogInSuccess; 如果(_blnLogInSuccess.IsCompleted) { g_blnLoginStatus = _blnLogInSuccess.Result; } } 捕捉(System.Exception _ex) { 显示错误 = 真; 我的异常 = 前; } 如果(显示错误) { var MyMessageBox = new Windows.UI.Popups.MessageDialog("远程登录错误:" + MyException.Message, "开始登录"); 等待 MyMessageBox.ShowAsync(); } }

【问题讨论】:

  • 你在输出视图中什么都不是?
  • 输出视图显示为系统崩溃消息的一部分,但不是作为没有系统崩溃的应用程序的一部分的消息对话框。所以,我想在 MessageDialog 中显示类文件中的错误消息。

标签: web-services c#-4.0 windows-phone-8 winrt-xaml


【解决方案1】:

我假设您的 CallWebSvc 方法是 async void(因为,如果没有 async,您将无法执行 await)如果是这种情况,您需要知道 async void 对异常的处理与异步任务不同。他们没有被正确捕获。如果您将 CallWebSvc 从 async void 更改为 async Task,您将正确收到异常。

【讨论】:

  • 是的,我使用的是 Async void。我的 LoginSuccess() 是异步 Task 并且 await 用于 CallWebSvc 中的此 LoginSuccess。如果我对 callWebSvc 和调用者使用 Async Task,setUp() 是否需要对 callWebSvc 使用 await?如果我在 SetUp() 中不使用 await,在 MyClass 中遇到错误时 CallWebSvc 会显示带有 MyMessageBox 的消息吗?
  • 我认为如果你让CallWebSvc异步,即使你在setUp中不使用await,它也会捕捉到错误并显示出来。
猜你喜欢
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多