首页 > 解决方案 > 挂起应用程序时,垃圾收集器会破坏单例对象

问题描述

我有一个带有两个单例类的 UWP 应用程序,一个用于包含用户信息的会话,另一个包含一个列表。当用户最小化应用程序时,它会被挂起,垃圾收集器会破坏会话和权限类,因此用户在最大化应用程序后没有任何权限。

我不想使用 OnSuspending 和 OnResume 事件来保存/序列化类,因为由于 toast 通知需要会话信息。

有没有办法告诉垃圾收集器完全不理会它们?我尝试在 OnSuspending 事件中调用 GC.Keepalive 但这没有帮助。

编辑:根据要求,这是我的会话单例的代码:

public class Session
{
    private Session()
    {

    }

    ~Session()
    {
        session = this;            
    }    

    private static Session session;

    public static Session Current
    {
        get
        {
            if (session == null)
                session = new Session();

            return session;
        }
    }

    public async Task<bool> LogIn(string username, string password)
    {
        ///
    }

    public void LogOut()
    {
       ///
    }


    public UserRights Permissions { get; set; }

    public User User { get; set; }

    public int UserId { get; set; }

    public string Token { get; set; }

我试图通过终结器绕过它,但在挂起和垃圾收集之间有一小段时间。在这个时候,问题仍然存在。当我在垃圾收集后最大化应用程序时,它就可以工作了。

标签: c#.netuwpgarbage-collection

解决方案


推荐阅读