我有一个将自己分配给事件的类:
public MainMenuButton()
{
this.DefaultStyleKey = typeof(MainMenuButton);
(App.Current as App).ApplicationLanguageChange += Localize;
}
在析构函数上我这样做:
~MainMenuButton()
{
(App.Current as App).ApplicationLanguageChange -= Localize;
}
在模拟器上,我在后退按钮上执行长按并关闭应用程序 - 析构函数抛出错误:
发生了'System.Exception'类型的未处理异常 myapplication.WindowsPhone.exe
其他信息:灾难性故障(HRESULT的例外情况: 0x8000FFFF(E_UNEXPECTED))
答案 0 :(得分:2)
在模拟器上,我在后退按钮上执行长按并关闭应用程序 - 析构函数抛出错误
您无法从终结器访问任何托管资源。无法保证他们中的任何一个还能活着。如果你所做的只是取消注册事件,你根本不需要那个终结器,因为你的应用程序即将关闭。
Finalize操作具有以下限制:
终结器执行的确切时间未定义。确保 为您的班级实例确定性释放资源, 实现Close方法或提供IDisposable.Dispose 实现。
无法保证两个对象的终结器 以任何特定顺序运行,即使一个对象引用另一个对象。 也就是说,如果对象A具有对象B的引用并且两者都具有 终结者,对象B可能已经完成了 对象A的终结器开始。
终结器运行的线程 没有具体说明。