Comment puis-je résoudre le Système".Le filetage.Les tâches.TaskCanceledException: "Une tâche a été annulée.'" exception sur l'app sortie (Winforms)?

0

La question

J'ai un WinForms lecteur MP3 application de bureau (par.NET Framework 4.7.2) qui est à l'aide de ElementHost pour accueillir un MediaElement de contrôle et dispose d'une Minuterie pour contrôler la lecture (comme la mise à jour d'un Curseur).

Tout fonctionne bien, mais lorsque je quitte l'application, j'ai l' "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" exception (je le remarque seulement lors de l'exécution sous le débogueur).

Ce n'est rien mais une nuisance et se sent la plupart du temps inoffensifs, mais je n'aime pas les exceptions que je ne comprends pas. La pile des appels est pas super utile:

>   mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task task)   Unknown
    mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task)  Unknown
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Wait(System.TimeSpan timeout)  Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherOperation operation, System.Threading.CancellationToken cancellationToken, System.TimeSpan timeout)   Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Action callback, System.Windows.Threading.DispatcherPriority priority, System.Threading.CancellationToken cancellationToken, System.TimeSpan timeout) Unknown
    WindowsBase.dll!MS.Internal.WeakEventTable.OnShutDown() Unknown
    WindowsBase.dll!MS.Internal.WeakEventTable.WeakEventTableShutDownListener.OnShutDown(object target, object sender, System.EventArgs e)  Unknown
    WindowsBase.dll!MS.Internal.ShutDownListener.HandleShutDown(object sender, System.EventArgs e)  Unknown

Cela se produit parce que le WPF pile n'obtient pas éliminés correctement en quelque sorte? Je m'assurer que mes DispatchTimer est arrêté dans MainForm_FormClosing mais peut-être qu'il y a autre chose j'ai besoin de nettoyer?

Pas un problème critique, bien sûr, par ennuyeux.

c# winforms wpf
2021-11-22 00:41:19
2

La meilleure réponse

1

Cette Exception est levée lorsqu'une méthode asynchrone n'est pas autorisé à exécuter jusqu'à la fin, afin que d'autres méthodes asynchrones avec la même CancellationToken peut arrêter le traitement normalement si nécessaire.

Vous pouvez probablement ignorer, comme il semble être une exception non interceptée à partir de l'une de ces bibliothèques que vous utilisez. Si ça vous gêne vraiment, et vous savez qu'il n'est pas dans votre base de code, vous pouvez tremper l'Exception, mais ce n'est généralement pas considéré comme une bonne pratique.

2021-11-22 00:48:57

Est-il un bon moyen de trouver la méthode qui est à l'origine de cette exception? Je me sentirais mieux si je savais que la bibliothèque est à l'origine. La pile des appels à l'exception de jeter de temps n'est pas très utile, et étant donné que c'est l'application de l'arrêt, il y a très peu de threads en cours d'exécution à gauche.
David Airapetyan

Vous pourriez emballer votre code avec une clause catch, et de mettre un point d'arrêt sur elle pour voir si vous pouvez localiser le délinquant dans la pile d'appel. Malheureusement, si l'un de vos bibliothèques a pris une Exception et re-jeté une nouvelle CancellationException, vous n'obtiendrez pas l'histoire complète, et votre meilleur pari est de voir si vous pouvez plonger dans le code source de la bibliothèque, s'il est disponible.
Chris
0

Il ressemble à un problème avec .NET Framework 4.7.2. Le problème et une solution de contournement sont décrites ici: TaskCanceledException dans ShutDownListener.

Le tl'dr est que l'ajout de ce qui suit à mon Application.config fait l'exception en aller:

  <runtime>
    <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
  </runtime>
2021-11-22 03:44:26

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................