¿Cómo puedo arreglar el Sistema".Las operaciones de roscado.Tareas.TaskCanceledException: 'Una tarea fue cancelado.'" excepción en la aplicación de salida (Winforms)?

0

Pregunta

Tengo un WinForms reproductor de MP3 aplicación de escritorio.NET Framework 4.7.2) que está utilizando ElementHost para alojar un control MediaElement y tiene un DispatcherTimer para controlar la reproducción (tales como la actualización de un control Deslizante).

Todo funciona bien, pero cuando voy a salir de la app, me sale el "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" excepción (me doy cuenta de que sólo cuando se ejecuta en el depurador).

No es nada pero una molestia y se siente en su mayoría inofensivas, pero no me gusta excepciones que no entiendo. La pila de llamadas no es super útil:

>   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

Sucede esto porque el WPF pila no conseguir disposición adecuada de alguna manera? Me aseguro de que mi DispatchTimer se detiene en MainForm_FormClosing pero tal vez hay algo más que deba limpiar?

No es una cuestión crítica, por supuesto, por molesto.

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

Mejor respuesta

1

Esta Excepción se produce cuando un método asincrónico no se permite la ejecución hasta su finalización con el fin de que otros métodos asincrónicos con el mismo CancellationToken puede dejar de procesar correctamente si es necesario.

Se le puede ignorar, como parece ser una excepción no capturada por una de esas librerías que se está utilizando. Si realmente te molesta y usted sabe que no está en su código base, se puede remojar la Excepción, pero en general no es considerado una buena práctica.

2021-11-22 00:48:57

Hay una buena manera de encontrar el método que está causando esta excepción? Me sentiría mejor si supiera que la biblioteca está causando. La pila de llamadas a excepción de tirar el tiempo no es muy útil, y dado que con la aplicación de apagado, son muy pocos los subprocesos de ejecución de la izquierda.
David Airapetyan

Usted podría ajustar su código con una captura de la cláusula, y poner un punto de interrupción en él para ver si puede localizar al delincuente en la pila de llamadas. Lamentablemente, si uno de sus bibliotecas ha cogido una Excepción y re-lanzado un nuevo CancellationException, no la historia completa, y su mejor apuesta es, entonces, a ver si se puede bucear en el origen de la biblioteca, si está disponible.
Chris
0

Se ve como un problema .NET Framework 4.7.2. El problema y una solución se describen a continuación: TaskCanceledException en ShutDownListener.

El tl'dr es que la adición de la siguiente a mi Aplicación.config hizo la excepción desaparece:

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

En otros idiomas

Esta página está en otros idiomas

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