어떻게 해결할 수 있는"시스템입니다.Threading.작업입니다.TaskCanceledException:'작업이 취소되었습니다.'" 예외에서 응용 프로그램 종료(Winforms)?

0

질문

나는 WinForms MP3 플레이어 데스크톱 응용 프로그램(.NET Framework4.7.2)을 사용하는 ElementHost 스 MediaElement 제어 있 DispatcherTimer 하 제어 재생(업데이트와 같은 슬라이더).

모든 것이 잘 작동하지만,때 나는 응용 프로그램을 종료,나 "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" exception(나는 그것을 실행하는 경우에만 디버거에서).

그것은 아무것도 하지만 귀찮은 느낌이 무해한 대부분이지만,저는 좋아하지 않는 예외는 내가 이해하지 못합니다. 호출 스택은 매우 유용:

>   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

이런 일이기 때문에 WPF 스택하지 않을 얻을 적절하게 폐기 somehow? 내장 내 DispatchTimer 를 중지에서 MainForm_FormClosing 하지만 아마도 다른 뭔가가 나를 청소해야합니까?

중요한 문제는 물론,니다.

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

최고의 응답

1

이 예외가 발생합니다면 비동기 방식 실행을 허용하지 않을 완료하는 순서는 다른 비동기식 방법으로 동 CancellationToken 할 수 있는 처리 중지 경우 정상적으로 필요합니다.

할 수 있는 가능성이 그것을 무시하는 것으로 보인다되는 포착되지 않는 예외 중 하나에서 그 당신은 라이브러리를 사용하는. 면 그것은 정말 당신을 귀찮게 당신이 그것을 알지 코드베이스에서,당신은 적시에 예외는 아니다,하지만 이것은 일반적으로 아주 좋습니다.

2021-11-22 00:48:57

있는 좋은 방법을 찾을 수 있는 방법을 일으키는 이 예외가 발생? 나는 느낌을 더 나은 내가 알고 있던 경우에는 라이브러리의 원인입니다. 호출 스택에서 예외를 던지는 시간이 매우 유용하며,주어진 응용 프로그램의 종료,거기에 매우 몇 가지 동작하는 쓰레드들 떠났다.
David Airapetyan

할 수 있는 코드를 포장 catch 절을 넣어점에서 그것을 참조하는 경우를 찾을 수 있습니다 가해자에서 호출 스택입니다. 불행하게도,하나의 라이브러리 잡은 예외하고 다시 던져 새로운 CancellationException 을 얻을 수 없습니다.전체 역사,그리고 당신의 최선의 방법은 다음을 참조할 수 있는 경우 다이빙으로의 소스 라이브러리는 경우 사용할 수 있습니다.
Chris
0

그것처럼 보이는 문제점이다.NET Framework4.7.2. 문제 해결 방법이 여기에 설명되어 있습니다 TaskCanceledException 에 ShutDownListener.

Tl'dr 는 다음을 추가합니다.config 만든 예외는 멀리 이동:

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

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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