c# - 挂起应用程序时,垃圾收集器会破坏单例对象
问题描述
我有一个带有两个单例类的 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; }
我试图通过终结器绕过它,但在挂起和垃圾收集之间有一小段时间。在这个时候,问题仍然存在。当我在垃圾收集后最大化应用程序时,它就可以工作了。
解决方案
推荐阅读
- php - 准备好的 MYSQL 语句不能正常工作
- android - 如何删除已经发送的推送通知?
- android - 带有喷气背包导航过渡的模态动画
- c - 如何在快速运行时获得总的非素数?
- python-3.x - 未知标签类型:(array([1, 1, ... ,1], dtype=object),)
- c++ - 从互斥锁函数中按值返回成员
- angular - 按文本搜索并更新 Observable
角 7 - debugging - 如何通过管道将命令标准输出传递给 lldb 调试文件标准输入
- laravel - Laravel webpack 包括自定义 javascript
- reactjs - 使用 Apollo 重新获取会更新该查询的所有实例,即使使用不同的参数