我有一個 WinForms MP3 播放器桌面應用程式 (.NET Framework 4.7.2),它使用 ElementHost 來承載 MediaElement 控制元件并有一個 DispatcherTimer 來控制播放(例如更新 Slider)。
一切正常,但是當我退出應用程式時,出現 "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'"例外(我僅在除錯器下運行時才注意到它)。
這只不過是一種滋擾,并且感覺大部分是無害的,但我不喜歡我不理解的例外。呼叫堆疊不是很有用:
> 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 堆疊沒有以某種方式正確處理嗎?我確保我的 DispatchTimer 在 MainForm_FormClosing 中停止,但也許我需要清理其他東西?
當然,這不是一個關鍵問題,令人討厭。
uj5u.com熱心網友回復:
當不允許異步方法運行完成時拋出此例外 - 以便其他具有相同異步方法的異步方法CancellationToken可以在需要時正常停止處理。
您可能會忽略它,因為它似乎是您正在使用的那些庫之一的未捕獲例外。如果它真的困擾你并且你知道它不在你的代碼庫中,你可以浸泡例外,但這通常不被認為是好的做法。
uj5u.com熱心網友回復:
它看起來像是 .NET Framework 4.7.2 的問題。此處描述了問題和解決方法:ShutDownListener 中的 TaskCanceledException。
tl'dr 是將以下內容添加到我的 App.config 使例外消失:
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/365592.html
上一篇:為什么c#winformsListView.Click事件處理程式僅在您單擊串列視圖中包含的文本而不是整個控制元件時才起作用?
