Question

J'ai été aux prises avec la gestion des événements dans les discussions de BackgroundWorker.

Tous les documents que je suis venu à travers me faire croire que lorsqu'un gestionnaire d'événements DoWork lance une exception cette exception devrait être traitée dans le gestionnaire RunWorkerCompleted et cette exception sera disponible dans la propriété d'erreur des RunWorkerCompletedEventArgs.

Ceci est bien, mais pendant le temps de débogage je vois toujours une exception non gérée par un message de code utilisateur. Cela me fait croire qu'il ya un problème avec mon approche.

Quelles mesures dois-je prendre pour résoudre ce problème?

Cordialement, Jonathan

Était-ce utile?

La solution

Je l'ai vu ce comportement avant, et j'ai eu autour de lui en décorant le gestionnaire DoWork avec l'attribut System.Diagnostics.DebuggerNonUserCode:

[System.Diagnostics.DebuggerNonUserCode]
void bw_DoWork(object sender, DoWorkEventArgs e)
{ ... }

Notez que vous ne verrez que si vous êtes en cours d'exécution dans le débogueur; même sans l'attribut, tout est comme il devrait être lors de l'exécution de la coquille.

Je regardais ce à nouveau, et je ne vois toujours pas une bonne raison pour laquelle vous avez besoin de le faire. J'appelle un débogueur disfonctionnement.

Autres conseils

J'ai eu ce problème auparavant. Le e.Error ne se prépare quand vous ne fonctionne pas en mode débogage. Si vous exécutez dans Debug, exectuion arrête à l'endroit de l'exception. Cependant, exécutez le même programme en mode débogage non (dans VS Debug -> Démarrer sans débogage ou Ctrl + F5) et la boîte de dialogue nasty exception ne monterons pas, et e.Error sera l'exception. Je ne sais pas pourquoi, mais comment ça marche ....

Votre approche est correcte. Il suffit de cliquer sur Continuer sur le message et continuer. En cas de doute, le tester en dehors d'une session de débogage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top