2009-11-09 26 views
1

當我使用XamlReader.Load()具有無效XAML串,將所得XAMLParseException沒有被捕獲儘管在一個try-catch塊beeing:Silverlight 3的XamlReader異常

try 
{ 
     UIElement xamlCode = XamlReader.Load(XamlText) as UIElement; 
} 
catch (Exception ex) 
{ 
     ErrorText = ex.Message; 
} 

該代碼被稱爲從DispatcherTimer的Tick事件中,但在MouseLeftButtonDown等事件中,也不會捕獲異常,從而導致在我調用.Load()的Line中斷。

有誰知道如何捕捉這個異常並恢復正常的程序活動?

謝謝,Andrej

+0

您是否找到解決方案? –

回答

0

這是完全不可思議的,這段代碼不會捕獲異常。你如何確定在這裏發生了XAMLParseException?你確定不是來自項目中的其他Xaml Load嗎?

0

情況總是這樣嗎?或僅在調試時?

我知道這是一個非常晚的答案,你可能已經找到了解決辦法,作爲參考尋找類似於他們的問題的人(如我的情況),我的答案可能仍然有用。

如果它在debuggin時發生,那可能是因爲exeption被配置爲拋出。

你可以改變這一點:

  1. 定製調試菜單,添加「例外」命令把它。
  2. 在「例外」配置中,深入查看「Common Language Runtime Exceptions」下的System.Windows.Markup.XamlParseException。
  3. 從「Throw」列中移除支票。
0

有各種各樣的Silverlight操作可以將「重新編組」到「單獨的線程」中,以便推測各種充分和充分的原因。它看起來有點像這樣:

Dispatcher.BeginInvoke(() => LoadSomeXamlOrSomething()); 

內LoadSomeXamlOrSomething拋出的任何異常()將不會被正常try/catch塊捕獲。即使在SL 4中也會發生這種情況,例如使用無效格式加載圖像。這很煩人,MS需要想出一個更好的方式來處理這個問題,例如,讓你在打電話時註冊一個異常處理程序。

直到MS數字了這一點,你的選擇是:

  • 修復底層XAML錯誤。
  • 捕獲App.Application_UnhandledException中的異常。