关闭应用程序时,WindowsBase.dll中出现“System.Threading.Tasks.TaskCanceledException”

时间:2014-10-28 16:50:24

标签: c# wpf multithreading caliburn.micro

我在viewmodel中有这个属性。

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

当我关闭我的应用程序时,有时候(大约10次)我在NotifyOfPropertyChange中收到以下错误:

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

其他信息:任务已取消。

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

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

无论如何都要防止发生此错误?

2 个答案:

答案 0 :(得分:10)

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

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

这应该强制应用程序在关闭之前终止所有活动线程。我记得有一个类似的问题,特别的小修复解决了它。可能值得尝试一下,如果它没有帮助我知道,我们可以看到其他可能的解决方案。希望这对你有用。

答案 1 :(得分:3)

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

String