在应用程序关闭Windows电话上的析构函数崩溃

时间:2015-09-07 12:20:33

标签: c# windows-phone-8.1

我有一个将自己分配给事件的类:

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))

1 个答案:

答案 0 :(得分:2)

  

在模拟器上,我在后退按钮上执行长按并关闭应用程序 -   析构函数抛出错误

您无法从终结器访问任何托管资源。无法保证他们中的任何一个还能活着。如果你所做的只是取消注册事件,你根本不需要那个终结器,因为你的应用程序即将关闭。

The docs say

  

Finalize操作具有以下限制:

     
      
  • 终结器执行的确切时间未定义。确保   为您的班级实例确定性释放资源,   实现Close方法或提供IDisposable.Dispose   实现。

  •   
  • 无法保证两个对象的终结器   以任何特定顺序运行,即使一个对象引用另一个对象。   也就是说,如果对象A具有对象B的引用并且两者都具有   终结者,对象B可能已经完成了   对象A的终结器开始。

  •   
  • 终结器运行的线程   没有具体说明。

  •   
相关问题