PresentationFramework.dll中发生'System.Reflection.TargetInvocationException'

时间:2012-08-28 17:30:50

标签: c# .net wpf

好的,我有点奇怪的错误......

这很好用:

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;
}

另外,它不允许我调试它;它会在程序加载时崩溃。如果我把一个断点放在它没有击中的地方;它只是马上出错。

5 个答案:

答案 0 :(得分:34)

事件可能在元素完全加载或引用仍未设置之前引发,因此例外。如果引用不是nullIsLoadedtrue,请尝试仅设置属性。

答案 1 :(得分:4)

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

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

try
{
    // code causing TargetInvocationException
}
catch (Exception e)
{
    if (e.InnerException != null)
    {
    string err = e.InnerException.Message;
    }
}

答案 2 :(得分:0)

我认为如果你声明一个实现了INotifyPropertyChanged的属性,然后将数据绑定IsCheckedSelectedIndex(使用IValueConverter)和Fill(使用IValueConverter)声明为它而不是使用Checked Event切换SelectedIndexFill

答案 3 :(得分:0)

如果在完全加载窗口的内容之前发生无线电按钮检查事件,即完全加载椭圆,则将抛出这种异常。因此,请检查窗口的UI是否已加载(可能是Window_ContentRendered事件等)。

答案 4 :(得分: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();