Jak naprawić "System.Gwintowanie.Zadania.Wyjątek TaskCanceledException: "Zadanie zostało anulowane"." Wyjątek po wyjściu z aplikacji (Winforms)?

0

Pytanie

Mam aplikacja odtwarzacza MP3, WinForms (.NET Framework 4.7.2), która wykorzystuje ElementHost aby umieścić element zarządzania MediaElement i ma menedżer czasu do sterowania odtwarzaniem (np. aktualizacja suwak).

Wszystko działa normalnie, ale gdy wychodzę z aplikacji, pojawia się "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" wyjątek (zauważyłem to dopiero po uruchomieniu pod debugerem).

Jest to nic innego, jak irytujące jest przeszkodą, i wydaje się w zasadzie nieszkodliwe, ale nie podobają mi się wyjątki, których nie rozumiem. Ślad nie jest bardzo przydatne:

>   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

Czy dzieje się to z powodu tego, że stos WPF w jakiś sposób nie są wykorzystywane prawidłowo? Gwarantuję, że mój menedżer czasu zatrzymany w MainForm_FormClosing, ale może jest coś jeszcze, co muszę wyczyścić?

Nie jest krytyczny problem, oczywiście, na podrażnienia.

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

Najlepsza odpowiedź

1

Jest to wyjątek występuje, gdy асинхронному metody nie wolno wykonywać, aż do zakończenia - do tego, aby inne metody asynchronicznej z tym samym CancellationToken w razie potrzeby można wdziękiem zatrzymać traktowanie.

Najprawdopodobniej można zignorować, tak jak to, zdaje się, неперехваченное wyjątek z jednego z tych bibliotek, które używasz. Jeśli to naprawdę przeszkadza i wiesz, że tego nie ma w twoim kodzie, można usunąć wyjątek, ale to zazwyczaj nie jest dobrą praktyką.

2021-11-22 00:48:57

Czy istnieje dobry sposób, aby określić, która metoda powoduje to wyjątek? Czułbym się lepiej, gdybym wiedział, w jakiej bibliotece to się dzieje. Stos wywołań podczas tworzenia wyjątków nie jest bardzo przydatne, i, biorąc pod uwagę, że to zakończenie działania aplikacji, pozostało bardzo mało uruchomionych wątków.
David Airapetyan

Można owinąć swój kod oferty catch i umieścić w nim pułapki, aby zobaczyć, czy będziesz w stanie znaleźć intruza w stosie wywołań. Niestety, jeśli jeden z twoich bibliotek złapała wyłączenie i ponowne wydała nowy wyjątek CancellationException, nie dostaniesz pełną historię, i to najlepiej zobacz, czy będziesz w stanie zanurzyć się w źródło biblioteki, jeśli jest on dostępny.
Chris
0

To wygląda na problem z .NET Framework 4.7.2. Problem i obejście są opisane tutaj: Wyjątek TaskCanceledException w ShutDownListener.

Problem w tym, że dodanie kolejnego w mojej aplikacji.config doprowadziło do zaniku wyjątki:

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

W innych językach

Ta strona jest w innych językach

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