gpt4 book ai didi

ViewModel 中的 Silverlight 异常未在 Application_UnhandledException 中捕获

转载 作者:行者123 更新时间:2023-12-03 10:16:48 25 4
gpt4 key购买 nike

我有以下情况,其中 ViewModel 中引发的异常不会冒泡到 App.xaml.cs 中的 Application_UnhandledException。

我在 ViewModel 中有一个 ObservableCollection,绑定(bind)到 ComboBox 中的 ItemSourceProperty。 ComboBox 的 SelectedItemProperty 绑定(bind)到 ViewModel 中的一个属性。

当用户在 ComboBox 中选择一个条目时,该属性在 ViewModel 中被正确调用。执行一些逻辑并在 ViewModel 中设置另一个属性(称为 property2)。但是,property2 中有一个未处理的异常。异常只是“消失” - 它不会在 UI 线程上引发。

有关如何普遍解决此问题或在任何线程上捕获异常的方法的任何建议?

请注意,我们有一个自定义构建的 MVVM 框架。起初,我认为这是我们框架的问题。经过数小时的调试后,我决定下载 Prism4 (http://www.microsoft.com/download/en/confirmation.aspx?id=4922),看看是否可以在 StockTrader 引用应用程序中重现类似的场景。

我可以重现完全相同的场景!我很乐意提供有关如何在 Prism4 中设置异常的详细信息。

非常感谢有关在 Silverlight 中捕获所有未处理异常的一般方法的任何帮助或指示。

问候,
特拉维斯

最佳答案

由于运行时允许您将异常用于验证目的,因此运行时的 get-value-for-binding 操作位于一个大的 try-catch block 中。

查看 ILSpy 中的 System.Windows.Data.BindingExpression.UpdateValue() 了解详细信息(在 System.Windows.WPF 版本中可能更容易理解(UpdateSource))。

我认为不可能自定义运行时的行为来重新抛出您自己的异常。你可以从代码中看到它确实重新抛出了一些关键的。

   OutOfMemoryException, StackOverflowException, AccessViolationException, ThreadAbortException

由于其他异常不会被重新抛出,它们实际上是被处理的。

我认为您的解决方案是捕获跟踪,或者在属性 setter 中进行自己的异常处理。

关于ViewModel 中的 Silverlight 异常未在 Application_UnhandledException 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com