UnhandledException在Windows Phone上的所有情况下都能正常工作吗?

Ale*_*lex 1 .net c# windows-phone-7 windows-phone windows-phone-8

在我的Windows Phone应用程序中,我Application.UnhandledException用来捕获所有未处理的错误.如果发生这种错误,那么我的应用程序会显示一个简单MessageBox的请求,通过电子邮件向开发人员发送错误报告.它看起来像这样:

protected virtual void OnUnhandledException(
    object sender, ApplicationUnhandledExceptionEventArgs e)
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            var result = MessageBox.Show(
                "Would you like to send a report to developers?", 
                "Error", 
                MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                var task = new EmailComposeTask();
                task.To = "feedback@site.com";
                task.Subject = "Error";
                task.Body = 
                    e.ExceptionObject + "\n" + e.ExceptionObject.StackTrace;
                task.Show();

                e.Handled = true;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,一切正常.

但许多用户抱怨说,有时应用程序只是崩溃而没有消息.我在开发人员的仪表板中有一些崩溃报告,但这些报告只有非常少量的有用信息.我无法理解什么样的错误会导致这种情况.我只假设在一个后台线程中发生了一些错误.

Application.UnhandledException正常工作在所有情况下?一些例外是否仍然未得到处理?在上述情况下可以做些什么?

谢谢.

Pau*_*tts 5

除了其他答案中的要点之外,您无法保证Dispatcher仍在运行或者UI线程将再次执行.

当然,如果应用程序或操作系统处于不良状态(尤其是使用OutOfMemory),任何做任何事情的尝试都可能失败.所以越少做得越好 - 这样你就不会搞砸手机收集并上传到商店的崩溃报告.

您应该将异常详细信息写入,IsolatedStorage并在下次启动应用时检测是否存在过去的异常.