我在模拟器和手机本身都发生了一些无法解释的崩溃事件。基本上当我的应用程序崩溃时,我没有任何对话框,手机返回主屏幕。
我有以下代码来显示MessageBox但是这被绕过...
// Code to execute if a navigation fails
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
MessageBox.Show(e.Exception.ToString());
}
// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
MessageBox.Show(e.ExceptionObject.ToString());
}
我想到它可能与记忆有关,因为我的应用处理了很多图像。但我认为仍然会被我上面未处理的异常代码捕获。关于如何追踪这一点的任何想法都将不胜感激。
答案 0 :(得分:5)
发生在我身上的一些事情:
StackOverflowException
,那就无法抓住,只会让应用炸弹您可能希望添加一些仅调试版本的持久性日志记录(在应用程序本身中加载和显示),以便更容易计算出崩溃前应用程序的上一次运行的程度。
答案 1 :(得分:5)
密切关注您的内存使用情况。 OutOfMemoryException在不调用Application_UnhandledException处理程序的情况下崩溃您的应用程序。 您可以使用一些内置方法检查当前内存使用情况。我不久前在博客上发表了这篇文章http://kodierer.blogspot.com/2010/09/windows-phone-memory-constraints.html
以下是您应添加的基本代码:
var timer = new DispatcherTimer {Interval = TimeSpan.FromSeconds(2)};
timer.Tick += (s, e) =>
{
var memuse = (long)DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage");
var maxmem = (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory");
memuse /= 1024 * 1024;
maxmem /= 1024 * 1024;
MyTextBlock.Text = String.Format("Mem usage: {0} / {1} MB", memuse, maxmem);
};
timer.Start();
答案 2 :(得分:1)
我的应用程序以完全相同的方式崩溃。
我将其跟踪到在DispatcherTimer tick处理程序中抛出OutOfMemoryException,尽管问题可能也发生在其他地方。
但是,OutOfMemoryException总是会占用您的程序。它不是。我在各种其他处理程序中尝试过它,它被正确捕获。
答案 3 :(得分:0)
你的应用程序可能因为长时间无响应而受到监视吗?也许是由于大量图像的加载时间以及此代码在UI线程上执行。