web-dev-qa-db-fra.com

'System.Reflection.TargetInvocationException' s'est produite dans PresentationFramework.dll

Ok, j'ai un bug bizarre ...

Cela fonctionne bien:

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

Ceci jette System.Reflection.TargetInvocationException:

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

De plus, cela ne me permet pas de le déboguer; il se bloque lors du chargement du programme. Si je mets un point d'arrêt n'importe où, il ne le frappe pas; il se trompe tout de suite.

29
Justin Kirk

L'événement est probablement déclenché avant que les éléments ne soient complètement chargés ou que les références ne soient toujours pas définies, d'où les exceptions. Essayez uniquement de définir les propriétés si la référence n'est pas null et que IsLoaded est true.

32
H.B.

Pour diagnostiquer ce problème, placez la ligne de code à l'origine de l'exception TargetInvocationException dans le bloc try.

Pour résoudre ce type d'erreur, obtenez l'exception interne. Cela pourrait être dû à un certain nombre de problèmes différents.

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

Si l'événement radiobutton-vérifié survient avant que le contenu de la fenêtre ne soit complètement chargé, c'est-à-dire que l'ellipse est complètement chargée, une telle exception sera levée. Vérifiez donc si l’interface utilisateur de la fenêtre est chargée (probablement par l’événement Window_ContentRendered, etc.).

Je pense que vous aurez moins de problèmes si vous déclarez une propriété qui implémente INotifyPropertyChanged, puis databind IsChecked, SelectedIndex (en utilisant IValueConverter) et Fill (en utilisant IValueConverter) au lieu d'utiliser l'événement Checked pour alterner SelectedIndex et Fill.

0
Bojin Li

Cela est souvent dû à une tentative de traitement d'un objet null . Un exemple, tenter de vider une liste Bindable ayant la valeur null, déclenchera l'exception:

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

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

Cela pourrait facilement être corrigé en vérifiant la valeur null:

if (ProductsList!= null) ProductsList.Clear();
0
usefulBee