Cum pot repara "Sistemul.Filetare.Sarcini.TaskCanceledException: O sarcină a fost anulat.'" excepție pe app ieșire (Winforms)?

0

Problema

Am o WinForms MP3 player aplicație desktop (.NET Framework 4.7.2), care este, folosind ElementHost pentru a găzdui un MediaElement de control și are o DispatcherTimer pentru a controla redarea (cum ar fi actualizarea unui Slider).

Totul merge bine, dar când am ieși din aplicație, am "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" excepție (am observat doar atunci când rulează sub debugger).

Nu e nimic, dar o pacoste și se simte în mare parte inofensiv, dar nu-mi place excepții care nu le înțeleg. La callstack nu este foarte util:

>   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

Se întâmplă asta pentru că WPF stiva nu obține eliminate în mod corespunzător cumva? Nu-mi asigura DispatchTimer este oprit în MainForm_FormClosing dar poate că există ceva de care am nevoie pentru a curăța?

Nu este o problemă critică, desigur, de enervant.

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

Cel mai bun răspuns

1

Această Excepție este aruncat atunci când o metodă asincron nu este permis să ruleze la finalizare - pentru că alte metode asincrone cu același CancellationToken poate opri procesarea cu grație, dacă este necesar.

Ai putea să-l ignore, cum pare să fie o excepție neprins de la unul din acele biblioteci care îl utilizați. Dacă este într-adevăr deranjeaza și știi că nu e în codebase, ai putea absorbi o Excepție, dar acest lucru este, în general, nu este considerată o bună practică.

2021-11-22 00:48:57

Există o modalitate buna de a găsi metoda care cauzează această excepție să fie aruncat? M-aș simți mai bine dacă aș ști care biblioteca este cauza. La callstack la excepția de aruncare timp nu este foarte util, și având în vedere că este app închidere, există foarte puține execută filete stânga.
David Airapetyan

Ai putea folie codul dvs. cu o captură clauză, și pune un breakpoint pe ea pentru a vedea dacă puteți localiza infractorului în stiva de apeluri. Din păcate, dacă una din biblioteci a prins o Excepție și re-a aruncat o nouă CancellationException, nu vei primi plin de istorie, și cel mai bun pariu este de a vedea dacă puteți arunca cu capul în sursa de bibliotecă, dacă este disponibilă.
Chris
0

Se pare ca o problemă cu .NET Framework 4.7.2. O problemă și o soluție sunt descrise aici: TaskCanceledException în ShutDownListener.

Tl'dr este că adăugând următoarele în Aplicația mea.config făcut excepție du-te departe:

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

În alte limbi

Această pagină este în alte limbi

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