';System.Threading.Tasks.TaskCanceledException';关闭应用程序

本文关键字:应用程序 Threading System Tasks TaskCanceledException | 更新日期: 2023-09-27 18:28:05

我的视图模型中有这个属性。

public bool IsKWH
{
    get { return _isKwh; }
    set
    {
        if (value.Equals(_isKwh)) return;
        _isKwh = value;
        NotifyOfPropertyChange(() => IsKWH);
    }
}

有时(大约十分之一)当我关闭应用程序时,我会在NotifyOfPropertyChange中出现以下错误:

WindowsBase.dll中发生类型为"System.Threading.Tasks.TaskCanceledException"的异常,但未在用户代码中处理

附加信息:任务已取消。

我的视图模型中有一个System.Threading.Timer,它正在进行Web服务调用以更新此属性和许多其他属性。

我正在使用Caliburn.Micro,当我从1.5更新到2.0时,它似乎已经开始发生了。

是否有任何方法可以防止此错误发生?

';System.Threading.Tasks.TaskCanceledException';关闭应用程序

在应用程序关闭之前,应用程序可能会间歇性地无法处理它正在使用的任何辅助线程。这通常会导致错误消息,例如您发布的错误消息。我可以建议试试以下几种吗:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
       // close all active threads
       Environment.Exit(0);       
}

这将强制应用程序在关闭之前终止所有活动线程。我记得有一个类似的问题,那个特殊的小修复解决了它。也许值得一试,如果它没有帮助,请告诉我,我们可以看看还有什么其他解决方案。希望这对你有效。

FWIW,该修复程序对我没有帮助。问题来自动态加载的第三方DLL。我无法阻止抛出异常,但我忽略了应用程序异常处理程序中的异常:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(
                (sender2, args) =>
                {
                    Exception ex = (Exception)args.ExceptionObject;  
                    // unloading dragon medical one
                    if (ex is TaskCanceledException)  
                        return;  // ignore