34

好吧,我有一个奇怪的错误......

这工作正常:

private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs e)
{
   //comboBoxNormalPoint.SelectedIndex = 0;
   //ellipsePoint.Fill = System.Windows.Media.Brushes.Black;
}

这抛出System.Reflection.TargetInvocationException

private void radioButtonNormalPoint_Checked(object sender, RoutedEventArgs e)
{
   comboBoxNormalPoint.SelectedIndex = 0;
   ellipsePoint.Fill = System.Windows.Media.Brushes.Black;
}

此外,它不允许我调试它;它在程序加载时崩溃。如果我在没有命中它的任何地方放置一个断点;它只是立即出错。

4

5 回答 5

34

该事件可能在元素完全加载或引用仍未设置之前引发,因此存在异常。null仅在引用 is not和IsLoadedis时尝试设置属性true

于 2012-08-28T18:34:52.267 回答
7

要诊断此问题,请将导致 TargetInvocationException 的代码行放在 try 块内。

要解决此类错误,请获取内部异常。这可能是由于许多不同的问题。

try
{
    // code causing TargetInvocationException
}
catch (Exception e)
{
    if (e.InnerException != null)
    {
    string err = e.InnerException.Message;
    }
}
于 2015-09-16T20:49:09.573 回答
0

我认为如果您声明一个实现 INotifyPropertyChanged 的​​属性,然后对其进行数据绑定IsCheckedSelectedIndex使用 IValueConverter)和Fill(使用 IValueConverter),而不是使用 Checked Event 来切换SelectedIndexFill

于 2012-08-28T20:05:55.077 回答
0

如果radiobutton-checked事件发生在窗口内容完全加载之前,即椭圆被完全加载,就会抛出这样的异常。所以检查窗口的UI是否被加载(可能是通过Window_ContentRendered事件等)。

于 2015-06-08T07:15:45.577 回答
0

这通常是由试图处理空对象引起的。例如,尝试清空一个为 null 的 Bindable 列表将触发异常:

public class MyViewModel {
    [BindableProperty]
    public virtual IList<Products> ProductsList{ get; set; }

    public MyViewModel ()
    {
        ProductsList.Clear(); // here is the problem
    }
}

这可以通过检查 null 来轻松解决:

if (ProductsList!= null) ProductsList.Clear();
于 2016-03-29T16:41:37.713 回答