【问题标题】:Destructor crash on application close windows phone应用程序关闭 Windows 手机时析构函数崩溃
【发布时间】:2015-12-03 00:12:13
【问题描述】:

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

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

【问题讨论】:

    标签: c# windows-phone-8.1


    【解决方案1】:

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

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

    The docs say:

    Finalize 操作有以下限制:

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

    • 不保证两个对象的终结器 以任何特定顺序运行,即使一个对象引用另一个对象。 也就是说,如果对象 A 具有对对象 B 的引用并且两者都有 终结器,对象 B 可能在 对象 A 的终结器启动。

    • 终结器运行的线程 未指定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2012-11-06
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      相关资源
      最近更新 更多