作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Silverlight 4 应用程序中,我在包含的控件 (DataGrid) 上调用一个函数,此函数有时会引发类型为 MS.Internal.WrappedException
的虚假异常。由于此异常没有意义,因此我需要将其吞下。不幸的是,异常在 System.Windows.dll 中声明为 internal class WrappedException : Exception
,因此我无法在 catch
block 中命名它。
问题是,检测这个异常并忽略它的最安全方法是什么?我提出的两个选项是:
ex.InnerException is InvalidOperationException
ex.GetType().FullName == "MS.Internal.WrappedException"
一种方法比另一种更好吗?还有其他我没有想到的选择吗?
这是我的函数,显示了不同的选项:
private void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedAlarm = alarmList.SelectedItem as Alarm;
if (selectedAlarm != null)
{
dataGrid.SelectedItem = selectedAlarm.Source;
try
{
dataGrid.ScrollIntoView(dataGrid.SelectedItem, null);
}
// catch (MS.Internal.WrappedException ex) doesn't compile
catch (Exception ex)
{
if (ex.InnerException is InvalidOperationException) // 1
if (ex.GetType().FullName == "MS.Internal.WrappedException") // 2
{
// ignore exception
}
else
throw;
}
}
}
对于那些感兴趣的人,这里是 StackTrace:
at MS.Internal.XcpImports.CheckHResult(UInt32 hr) at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize) at System.Windows.UIElement.Measure(Size availableSize) at System.Windows.Controls.DataGrid.InsertDisplayedElement(Int32 slot, UIElement element, Boolean wasNewlyAdded, Boolean updateSlotInformation) at System.Windows.Controls.DataGrid.InsertDisplayedElement(Int32 slot, Boolean updateSlotInformation) at System.Windows.Controls.DataGrid.GetExactSlotElementHeight(Int32 slot) at System.Windows.Controls.DataGrid.ScrollSlotIntoView(Int32 slot, Boolean scrolledHorizontally) at System.Windows.Controls.DataGrid.ScrollSlotIntoView(Int32 columnIndex, Int32 slot, Boolean forCurrentCellChange, Boolean forceHorizontalScroll) at System.Windows.Controls.DataGrid.ScrollIntoView(Object item, DataGridColumn column) at DtDemo.Home.alarmList_SelectionChanged(Object sender, SelectionChangedEventArgs e)
这是 InnerException.StackTrace:
at System.Windows.Controls.DataGridRow.get_ActualDetailsVisibility() at System.Windows.Controls.DataGridRow.OnApplyTemplate() at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
最佳答案
这是有意为之的,因此您不要 try catch 此异常。这是一个严重的问题,并非毫无意义,请不要忽略它。解决真正的问题。如果没有堆栈跟踪,我无法帮助您诊断原因。
关于c# - 有没有办法处理无法访问的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752444/
我是一名优秀的程序员,十分优秀!