web-dev-qa-db-fra.com

Une exception non gérée du type "'System.Reflection.TargetInvocationException" s'est produite dans System.Windows.ni.dll "inWindows Phone

Je crée une application WP8 qui utilise Web Service pour extraire, créer, mettre à jour et supprimer des données et les afficher. 
Maintenant, le problème est que mon application se bloque en lançant 

Une exception de type non gérée "'System.Reflection.TargetInvocationException' s'est produite dans System.Windows.ni.dll" inWindows Phone

enter image description here

Il n'y a aucune trace de pile pour cette exception et je suis coincé avec celle-ci pendant des heures. Et j’ai remarqué que cette exception se produit chaque fois que le service est appelé plus fréquemment que la normale, mais je n’ai pas compris la raison réelle.

C'est vraiment utile de savoir 
1.Quel type d'exception est-ce? 
2.À quelle condition cela se produira-t-il? 
3. Comment pouvons-nous gérer le blocage de l'application à cause de cette exception?

12
asitis

Votre commentaire

Tu as raison . dois un objet exception interne dit "à MyApp.ViewModels.CreateViewModel.d__61.MoveNext () --- fin de la trace de la pile de l'emplacement précédent où l'exception a été levée --- à System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__0 (état de l'objet) "Message: La référence à un objet n’est pas définie sur une instance d’un objet.

montre simplement que quelque part, vous appelez une méthode asynchrone qui n’est pas attendue: quand une méthode renvoie une tâche, attendez-la toujours.

Votre exception interne doit avoir une exception interne (c'est-à-dire $ exception.InnerException.InnerException ou stacktrace vous indiquera l'emplacement de votre NullReferenceException)

L'événement UnhandledException est appelé lorsqu'une exception de votre code n'a pas été gérée par votre code et que l'application ne sait pas comment la gérer . Par défaut, votre application se bloque . Cependant, vous pouvez empêcher votre application de tomber en panne dans ces cas. Voir ceci pour en savoir plus.

Pour résoudre votre problème "de façon claire", vous devrez trouver l'endroit où votre code n'est pas attendu et le réparer. c'est-à-dire que vous trouverez quelque part:

myObject.DoSomethingAsync(); // DoSomethingAsync() returns a task.

Changes le :

try
{
   await myObject.DoSomethingAsync(); // DoSomethingAsync() returns a task.
}catch(Exception ex)
{
   // display error message or whatever
}

[edit] Cela gérera l'erreur, mais ce que vous voulez vraiment réparer est la cause de votre exception nullref. Je n'ai pas beaucoup d'indices, mais cela ressemble à un problème de concurrence de thread.

14
Olivier

1.Quel type d'exception est-ce? 

cette exception se produira lorsque vous tenterez d'accéder à un rapport w/s et celle-ci deviendra surchargée.

2. À quelle condition cela se produira? 

La logique métier est compliquée ou le verrou de la base de données ou ne répond pas

3.Comment pouvons-nous gérer le blocage de l'application à cause de cette exception?

pour le gérer, je recommande de faire mieux la performance de ce w/s ou vous pouvez utiliser appel récursif, mais cela ne résoudra pas le problème, je pense

3
techloverr

Ou InvokeRequired lors de l'utilisation de Task

delegate void SetDataSourceHandler(DataTable data); 

public void SetDataSource(dDataTable data)
{
    if (gvData.InvokeRequired)
            {
                gvData.Invoke(new SetDataSourceHandler(SetDataSource), new object[] { data });
                return;
            }
            nodosDataTableBindingSource.DataSource = data;

        }

async Task ProcesarMensajes()
{
...
 SetDataSource( GetList(nodes));
}
0
Carlos