我有3个ObservableCollections在我ViewModel和Class你运行应用程序时加载的一个.为了确保ObservableCollections反序列化,我得到了.
if(SomeCollection.Count == 0)
ThisCollection = await deserializationMethod<ObservableColletion<T>>(filename);
Run Code Online (Sandbox Code Playgroud)
如果没有文件,deserializationMethod将使用创建新对象
return Activator.CreateInstance<T>();
Run Code Online (Sandbox Code Playgroud)
这很好 - 没问题.
我上课了
if(ClassObject.Loaded != true)
ThisObject = await deserializationMethod<T>(filename);
Run Code Online (Sandbox Code Playgroud)
我添加了一个属性 - 如果文件被反序列化,那么它是真的.看起来它有效,但事实并非如此.它很少发生,但有时文件没有反序列化,当你使用应用程序时,这个文件被覆盖,所以每个数据都被销毁.我找不到导致问题的原因.只是你运行一个应用程序,它发生 - 就像每100次运行一次.
如何确定如果文件存在那么它将被反序列化肯定?或者也许我应该制作List这些ObservableCollections+ Class并将其序列化为一个文件?那有什么好的做法吗?
编辑:
我曾经SemaphoreSlim确保一切都按照预期使用,但今天又发生了.
事情是它发生在应用程序启动时,甚至没有其他东西被点击.目前没有办法写一些东西.看起来数据没有反序列化或者没有读取存在的文件.因为每个更改都是通过关闭应用程序编写的,所以一切都消失了 任何其他想法可能是什么或如何确保数据被反序列化?
EDIT FINAL - 转载问题:
我终于复制了正在发生的事情.所以我删除了使用此处不需要的代码的编辑.
我有BackPressed事件要处理用户回来或想要退出应用程序(如果打开MainPage).这部分代码显然导致了这个问题.究竟是怎么回事.首先,使用模拟器无法复制问题.我的BackPressed方法包含等待序列化方法,该方法保存了后来消失的数据(因为Ondrej Svejdar写的是在阅读之前写的).但我开始测试它并且有奇怪的行为,我仍然有一些问题.
怎么回事.
当我启动一个应用程序(例如偶然)和加载屏幕时,我开始轻按几次按钮 - >应用程序没有运行它正在尽快关闭我甚至看不到用户界面(有时我能看到AppBar一会儿).然后,当我再次尝试打开应用程序时(无论是立即还是稍后),它"正在恢复",在此确切时刻之后,我的数据消失了.但不是所有的数据.只有在BackPressed方法中使用await保存的最后一个.只有这一个.ObservableCollections无论有没有这个类,我都尝试保存一,二和三,并且最后一个保存为"空".在此等待之后,我得到了可能导致这种情况的Application.Current.Exit()方法,但我不确定当序列化方法是Task并且只有最后一个被错误地序列化时这是否重要.
当我从BackPressed方法中删除此等待时,我无法重现此问题,所以就是这样.
我仍然有的问题是:这种行为是否可以预期?是否有更好的方法来关闭应用程序并确保序列化数据,或者我应该在使用应用程序时保存它而不是在退出时?