ComboBox崩溃WPF应用程序,因为SelectionChanged发射太快

时间:2017-05-18 15:08:29

标签: wpf xaml combobox crash nullreferenceexception

这是我的XAML:

<ComboBox x:Name="cloneSelector"
          Width="80"
          SelectedIndex="0"
          VerticalAlignment="Top"
          Margin="10"
          SelectionChanged="cloneSelector_SelectionChanged">
    <ComboBoxItem Content="All" />
    <ComboBoxItem Content="Top" />
    <ComboBoxItem Content="Middle" />
    <ComboBoxItem Content="Bottom" />
    <ComboBoxItem Content="None" />
</ComboBox>

这是SelectionChanged处理程序(由评论请求):

cloneSelection = (CloneFormat) cloneSelector.SelectedIndex;

var frameSize = videoDevice.VideoResolution.FrameSize;

    switch (cloneSelection)
    {
        case CloneFormat.Top:
            cloneRect = new Rectangle(0, 0, frameSize.Width, (frameSize.Width* 9) / 16);
            break;
        case CloneFormat.Middle:
            cloneRect = new Rectangle(0, 100, frameSize.Width, (frameSize.Width* 9) / 16);
            break;
        case CloneFormat.Bottom:
            cloneRect = new Rectangle(0, 200, frameSize.Width, (frameSize.Width* 9) / 16);
            break;
        default:
            cloneRect = new Rectangle(0, 0, frameSize.Width, frameSize.Height);
            break;
    }

如果移除了SelectedIndexSelectionChanged处理程序或ComboBoxItems,我的应用程序就会运行。问题似乎是处理程序过早访问cloneSelector并抛出空对象异常。是否有一种简单的方法可以在保持我的功能的同时防止这种行为(即没有将SelectedIndex从-1开始)?

另外,如果我没有经常测试我的项目,我会不知道我做了什么来打破它。它成功构建并无声地失败。当我调试时,No Symbols Loaded设计器中的Exception Unhandled框说

System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'

Inner Exception

NullReferenceException: Object reference not set to an instance of an object.

我可以看到它是在PresentationFramework.dll中引发的,但它没有给我任何关于什么是null或导致错误的信息。如何获得更好的调试信息,即告诉我ComboBox是崩溃的来源?

1 个答案:

答案 0 :(得分:0)

事实证明我的ComboBox甚至不是空引用,它是我的视频分辨率对象。更多的原因我需要更具体的调试信息。