【问题标题】:Application Exit unknowingly in Windows Phone应用程序在 Windows Phone 中不知不觉退出
【发布时间】:2013-05-31 00:58:43
【问题描述】:

应用程序在没有捕捉到异常的情况下在不知不觉中退出。我们在应用程序中实现了try catch 功能。我无法在 App 未处理异常中捕获异常。

例如,我们的应用程序中有子菜单屏幕,同时单击子菜单内容列表屏幕会显示。但有时连续在子菜单屏幕上工作,应用程序会在不知不觉中退出。 请建议。

子菜单页面示例代码: 我有两个堆栈面板,每个面板都有相同的代码集用于导航到其他页面。

private void stk_searchworkorder_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        try
        {
            (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/MMS/WOSearch.xaml?History=false", UriKind.RelativeOrAbsolute));
        }
       catch (System.Reflection.TargetException ex) { }   catch (Exception ex)
        {
            MessageBox.Show("Unknown exception", app.glbExceptionTitle, MessageBoxButton.OK);
        }
    }

    private void stk_searchworkorder_MouseEnter(object sender, MouseEventArgs e)
    {
        try
        {
            SolidColorBrush br = new SolidColorBrush(Color.FromArgb(255, 40, 40, 40));
            stk_searchworkorder.Background = br;
        }
        catch (System.Reflection.TargetException ex) { }
        catch (Exception ex)
        {
            MessageBox.Show("Unknown exception", app.glbExceptionTitle, MessageBoxButton.OK);
        }
    }

    private void stk_searchworkorder_MouseLeave(object sender, MouseEventArgs e)
    {
        try
        {
            SolidColorBrush br = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            stk_searchworkorder.Background = br;
        }
        catch (System.Reflection.TargetException ex) { }
        catch (Exception ex)
        {
            MessageBox.Show("Unknown exception", app.glbExceptionTitle, MessageBoxButton.OK);
        }
    }

【问题讨论】:

    标签: windows-phone-8 windows-phone


    【解决方案1】:

    您很可能内存不足。如果您的应用程序的内存使用量超过其限制,WP8 操作系统终止您的应用程序,而您的应用程序无法捕获任何异常。

    限制为here

    对于故障排除,您可以使用DeviceExtendedProperties class 查询您的应用内的内存使用情况。归根结底,您需要确保您的应用永远不会超过 150。

    您的应用程序可能存在内存泄漏。

    【讨论】:

    • 如何避免内存泄漏?注意:我们经常从应用程序调用 WCF 服务来分配/保存数据集合到在线服务器。
    • 请对应用程序退出和内存泄漏提出建议。如何克服这些问题
    • 这不是一个可以轻易回答的问题。您将希望从 SDK 提供的 Windows Phone 应用程序分析工具开始,该工具将向您指出具有大量或不断增长(泄漏)内存分配的对象。工具网址:msdn.microsoft.com/en-us/library/windowsphone/develop/…
    【解决方案2】:

    查看您的 App.xaml.cs 文件。有一个 Application_UnhandledException 方法。确保您在此方法中正确处理异常,并且如果您设置 e.Handled = true,则此后应用程序不会崩溃。

    请注意,这不会捕获所有可能的未处理异常 - 例如,OutofMemoryException 仍会使应用程序崩溃,但它确实捕获了很多异常。

    【讨论】:

      【解决方案3】:

      不确定我是否遗漏了什么,但您不会只使用 NavigationService.Navigate 而不是 (Application.Current.RootVisual as PhoneApplicationFrame).Navigate?

      【讨论】:

      • 在大多数情况下(可能包括这个),是的,你可以这样做,但有些情况下你不能 - 例如,如果你在一个没有的实用程序函数中访问导航服务。我可以想象,因为这些是 UI 组件事件处理程序,但事实并非如此。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      相关资源
      最近更新 更多