You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Winforms应用退出时出现System.Threading.Tasks.TaskCanceledException异常如何修复?

异常成因

这个异常确实是WPF栈资源未有序释放导致的。从调用栈可以看出,异常触发在WPF内部WeakEventTable的关闭流程:应用退出时WPF运行时清理弱事件表,需要向WPF调度器同步派发任务,但此时调度器已经开始销毁,相关任务被取消就抛出了该异常。因为它属于WPF框架内部的第一方异常,只有调试器默认会捕获这类异常,所以仅调试时会触发,正常运行不会暴露,也不会影响功能。

需要补充的清理步骤

你已经停止了DispatcherTimer,还需要在MainForm_FormClosing事件中按顺序执行以下清理操作:

  • 先释放MediaElement的媒体资源:
// 停止当前播放
mediaElement.Stop();
// 清空媒体源
mediaElement.Source = null;
// 关闭媒体实例
mediaElement.Close();
  • 卸载并销毁ElementHost资源:
// 移除WPF子控件
elementHost.Child = null;
// 释放ElementHost托管资源
elementHost.Dispose();
  • 主动关闭WPF调度器,等待所有待处理任务执行完毕:
System.Windows.Threading.Dispatcher.CurrentDispatcher.InvokeShutdown();

临时调试规避方案

如果暂时不想修改业务代码,可以在VS调试器的异常设置中,配置System.Threading.Tasks.TaskCanceledException仅当用户代码未处理时才中断,或者直接排除该异常的调试捕获,即可消除调试干扰。

内容的提问来源于stack exchange,提问作者David Airapetyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:15:11