我有一个在Windows 10 Mobile上运行的,用c#编写的UWP应用程序。我遇到了一个需要成为Singleton并且使用Lazy模式初始化的类。下面是我如何做它(这是几乎每个人是怎么做的),当应用程序是从零开始,“正常”使用当应用程序被暂停时,Windows UWP如何处理我的Lazy初始化Singleton类?
public class WindowsUniversalScanners
{
private static readonly Lazy<WindowsUniversalScanners> lWindowsScanner = new Lazy<WindowsUniversalScanners>(() => new WindowsUniversalScanners());
public static WindowsUniversalScanners Instance { get { return lWindowsScanner.Value; } }
public delegate void ScannerDataEventHandler(ScannerDataEventArgs se);
public event ScannerDataEventHandler onScanData;
public delegate void ScannerStatusEventHandler(ScannerStatusEventArgs se);
public event ScannerStatusEventHandler onScanStatus;
public delegate void ScannerInitializationStatus(ScannerInitEventArgs si);
public event ScannerInitializationStatus onScannerInit;
private WindowsUniversalScanners()
{
StartScanner();
}
,一切工作正常。但是,如果该应用程序被暂停(意味着您切换到另一个应用程序,按下Windows键等),然后又恢复,则此类中的事件不再引发。
我也可以在此类中的代码中放置断点,并且看到断点在挂起之前应该处于中断状态,但在挂起之后,断点不再触发(这最终是事件从不触发的原因)。
因此,我假设Windows在应用程序暂停时销毁了我的Singleton?请注意,这也不是时间的事情。我读到,当一个应用程序暂停x秒,操作系统需要释放资源时,它可以终止事情。然而,即使我暂停了一秒钟,这个问题仍然会发生。应用程序的其他大部分功能在恢复后仍然正常工作。
那么,有人可以确认什么操作系统做的单身时,应用程序暂停具体?我已经做了大量关于应用程序生命周期的MSDN文档的阅读,但没有解决这个特定的问题。
另外,确认实际上这个类是否为空的最好方法是什么?我可以检查Instance = null来验证吗?假设是这样,我想我只需要重新实例化它呢?
谢谢!
这可能有助于https://docs.microsoft.com/en-us/windows/uwp/launch-resume/suspend-an-app如果没有人回答你的问题,但你制定出一个解决方案,你应该张贴在这里回答你的问题。 – hatchet