Windows phone 8.1 在windows phone 8.1中删除后,恢复可移植类库中类的静态属性

Windows phone 8.1 在windows phone 8.1中删除后,恢复可移植类库中类的静态属性,windows-phone-8.1,static-members,portable-class-library,tombstoning,Windows Phone 8.1,Static Members,Portable Class Library,Tombstoning,我有一个为Windows8.1和WindowsPhone8.1构建的应用程序。在便携式类库中有一个非静态类,该类库由tablet和phone项目共享。在电话中,在墓碑上的静态属性丢失。如何将可移植类库的静态类成员存储在停用事件中并还原(到可移植类库中的非静态类的当前实例)在手机生命周期的激活事件中,以便在逻辑删除后应用程序继续运行而不会发生任何崩溃。这取决于这些静态成员的访问级别 如果它们是公共的,并且您可以直接从Windows Phone应用程序访问它们,那么您可以像通常一样在适当的应用程序生

我有一个为Windows8.1和WindowsPhone8.1构建的应用程序。在便携式类库中有一个非静态类,该类库由tablet和phone项目共享。在电话中,在墓碑上的静态属性丢失。如何将可移植类库的静态类成员存储在停用事件中并还原(到可移植类库中的非静态类的当前实例)在手机生命周期的激活事件中,以便在逻辑删除后应用程序继续运行而不会发生任何崩溃。

这取决于这些静态成员的访问级别

如果它们是公共的,并且您可以直接从Windows Phone应用程序访问它们,那么您可以像通常一样在适当的应用程序生命周期处理程序中保存和恢复它们(或者使用
suspendionmanager
类,如果您正在使用的话)。这意味着您的可移植类库不关心“应用程序生命周期”或“保存/恢复状态”之类的问题;相反,您的Windows Phone应用程序有责任提供此行为,并且您的便携类库可以保持独立于此类Windows Phone特定要求

如果它们是非公共的,那么您的可移植类库将需要提供一些保存和恢复其内部状态的方法。您可以公开静态方法来执行此操作,您可以在Windows Phone应用程序的相应应用程序生命周期处理程序中调用这些方法。例如,您的可移植类库中可能有如下方法:

publicstaticvoidsavestate(Dictionary stateDict)
{
//在dict中存储静态成员的状态
stateDict[“Foo”]=SomeClass.FooStaticMember;
stateDict[“Bar”]=SomeClass.BarStaticMember;
...
}
您可以在应用程序的挂起处理程序中调用此方法,例如:

public应用程序()
{
this.InitializeComponent();
this.Suspending+=this.OnSuspending;
}
暂停时的专用异步void(对象发送方,SuspendingEventArgs e)
{
var deleral=e.SuspendingOperation.getdeleral();
//在此处保存PCL状态
MyPortableClassLibrary.SaveState(SuspensionManager.SessionState);
等待SuspensionManager.SaveAsync();
延迟。完成();
}
类似地,当
e.PreviousExecutionState==ApplicationExecutionState.Terminated
时,您将在
App.OnLaunched
覆盖方法中加载状态。Pivot App项目模板(或类似模板)包含可用于处理的应用程序生命周期事件的框架代码

如何在停用事件中存储可移植类库的静态类成员并将其还原(到可移植类库中非静态类的当前实例)

类是非静态的这一事实并不重要;该类中有静态成员,这些成员在该类的所有实例中共享。不能仅恢复类的一个实例的静态成员的状态;那没有任何意义