2011-01-13 45 views
0

我正在開發Windows Phone應用程序。 我將它提交給Microsoft,他們向我發回了一個描述恢復應用程序時發生錯誤的文件(它與5.2性能和資源管理相關,點5.2.3)。Windows Phone應用程序在恢復時出現異常

重現錯誤,我運行應用程序,我開始啓動按鈕去「桌面」,然後單擊「返回」按鈕。 之後,在黃色的System.Diagnostics.Debugger.Break();線Visual Studio的亮點在此代碼

// Code to execute on Unhandled Exceptions 
     private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
     { 
      if (System.Diagnostics.Debugger.IsAttached) 
      { 
       // An unhandled exception has occurred; break into the debugger 
       System.Diagnostics.Debugger.Break(); 
      } 
     } 

隨着堆棧跟蹤,我發現,最後調用的方法是CallApplicationUEHandler

那麼,這是一個已知的例外嗎?我忘了處理一些例外嗎?

下面是最後三行輸出的正上方CallApplicationUEHandler的呼叫:

first chance exception 'System.ArgumentNullException' in Microsoft.Phone.Controls.dll 
first chance exception 'System.ArgumentException' in System.Windows.dll 
first chance exception 'System.ArgumentException' in System.Windows.dll 

的構造函數:

對於的MainPage:

public MainPage() 
     { 
      journal.Debug(string.Format("Entrée méthode {0}", new StackTrace().GetFrame(1).GetMethod().Name)); 
      InitializeComponent(); 

      Loaded += new RoutedEventHandler(PhoneApplicationPage_Loaded); 
     } 



private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     mainVM = new MainViewModel(); 
     DataContext = mainVM; 
    } 

對於應用程序:

public App() 
     { 
      // Global handler for uncaught exceptions. 
      // Note that exceptions thrown by ApplicationBarItem.Click will not get caught here. 
      UnhandledException += Application_UnhandledException; 

      // Standard Silverlight initialization 
      InitializeComponent(); 

      // Phone- {2} -specific initialization 
      InitializePhoneApplication(); 
     } 

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
     { 
      if (System.Diagnostics.Debugger.IsAttached) 
      { 
       // An unhandled exception has occurred; break into the debugger 
       System.Diagnostics.Debugger.Break(); 
      } 
     } 
+0

「CallApplicationUEHandler」是最重要的事情,因爲這是將事件鏈關閉到未處理的異常處理程序的原因。堆棧跟蹤的* rest *是什麼?在堆疊下面的東西會給我們更多的信息來幫助你。有更多細節的'InnerException'嗎? –

+0

@John Gardner:我什麼都沒有。但是最後三個調試行包含第一次機會異常。我編輯了帖子以顯示他們。 – Zakaria

+0

在您首次離開之前,您是否確認該應用程序已完成完全加載? –

回答

1

由於Application_UnhandledException被調用,所以很可能你沒有在某處處理異常。

通過查看正在加載的頁面的頁面構造函數以及OnNavigatedTo事件處理函數(如果有的話)來調試。

在應用程序級別,看看你在做什麼Application_Activated

+0

我在Application_Activated方法中什麼也沒做。 – Zakaria

+0

@ Zakaria和什麼關於構造函數或OnNavigatedTo事件? –

0

將您的代碼放在Try-Catch塊中。我也遇到了這樣的問題,但後來由異常處理方法處理。

try 
{ 

    // your code 

} 

catch (Exception ex) 
{ 

    throw (ex); 
} 
相關問題