Ako môžem opraviť "Systém.Rezanie závitov.Úlohy.TaskCanceledException: 'úloha bola zrušená.'" výnimkou na aplikáciu ukončiť (Winforms)?

0

Otázka

Mám WinForms MP3 prehrávač pracovnej plochy (.NET Framework 4.7.2), ktorý je pomocou ElementHost hosť MediaElement kontroly a má DispatcherTimer na ovládanie prehrávania (ako je napríklad aktualizácia Posuvník).

Všetko funguje, ale keď mám ukončiť aplikáciu, dostanem "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" výnimkou (I všimnite si, že len vtedy, keď beží pod debugger).

To nie je nič ale na obtiaž a cíti sa väčšinou neškodné, ale nemám rád výnimky, ktoré nechápem. Na callstack nie je super užitočné:

>   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

Je to tak preto, lebo WPF zásobník nedostane nezlikviduje správne nejako? Som zabezpečenie moje DispatchTimer sa zastavil v MainForm_FormClosing ale možno je niečo iné potrebujem upratať?

Nie je kritický problém, samozrejme, otravné.

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

Najlepšiu odpoveď

1

Táto Výnimka je hodená, pri asynchrónnej metódy nie je povolené zrealizovateľné - v poriadku, že iné asynchrónnej metódy s rovnakým CancellationToken môžete zastaviť spracovanie elegantne ak je to potrebné.

Ste pravdepodobne môžete ignorovať, tak ako sa to zdá byť uncaught výnimkou jednej z tých knižníc, ktoré používate. Ak je to naozaj trápi vás a vy viete, že nie je vo vašom codebase, mohli by ste nasiakli Výnimky, ale to nie je všeobecne považovaná za dobrú prax.

2021-11-22 00:48:57

Je tam dobrý spôsob, ako zistiť, ktorý spôsob je príčinou tohto výnimkou byť hodená? By som sa cítila lepšie, keby som vedel, ktoré knižnica spôsobuje to. Na callstack na výnimkou hádzanie čas nie je veľmi užitočné, a vzhľadom na to, že je to aplikácia, vypnutie, existuje len veľmi málo beží nite doľava.
David Airapetyan

Mohli by ste zábal váš kód s chytiť frázy, a dať bod prerušenia na ňom vidieť, ak môžete nájsť páchateľa v call stack. Bohužiaľ, ak sa jeden z knižnice chytil Výnimkou a znovu hodil nový CancellationException, nebudete mať plné histórie, a vaše najlepšie stávka, potom je vidieť, ak môžete ponoriť do zdroja knižnice, ak je k dispozícii.
Chris
0

Vyzerá to na problém s .NET Framework 4.7.2. Problém a riešenie, sú tu popísané: TaskCanceledException v ShutDownListener.

Tl'dr je, že pridaním nasledujúcich svojej Aplikácie.config vyrobené výnimkou ísť preč:

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

V iných jazykoch

Táto stránka je v iných jazykoch

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