gpt4 book ai didi

c# - 有没有办法处理无法访问的异​​常?

转载 作者:行者123 更新时间:2023-11-30 19:48:55 24 4
gpt4 key购买 nike

在 Silverlight 4 应用程序中,我在包含的控件 (DataGrid) 上调用一个函数,此函数有时会引发类型为 MS.Internal.WrappedException 的虚假异常。由于此异常没有意义,因此我需要将其吞下。不幸的是,异常在 System.Windows.dll 中声明为 internal class WrappedException : Exception,因此我无法在 catch block 中命名它。

问题是,检测这个异常并忽略它的最安全方法是什么?我提出的两个选项是:

  1. 寻找原始异常:ex.InnerException is InvalidOperationException
  2. 查找名称: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/

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