2011-11-24 95 views
0

我开发了一个在windows phone上工作正常的应用程序。该应用程序的性质是这样的,它不需要支持墓碑。也就是说,每次都可以启动一个新的实例。开始新的应用程序的实例,防止墓碑

问题是如何防止墓碑我的应用程序?例如,如果用户在应用程序中单击开始按钮,我需要终止该应用程序,以便当他点击返回键时,应用程序以新实例开始。

任何帮助将不胜感激! :)

+0

芒果墓碑是不是即时的,因为它曾经是,使快速切换应用程序的用户。你为什么要防止这个? –

回答

1

在每个页面你有OnNavigatedTo(或者你可以重写PhoneApplicationPage)只需设置一个变量,每个页面检查返回到原始页面。从那里,你可以重新开始,就像它是一个开始。

道歉,如果函数名称不是100%,在没有Visual Studio可用的情况下键入。

一些逻辑.. 在App.xaml.cs

public static bool Activated = false; 

ApplicationActivated() 
{ 
    Activated = true; 
} 
在每一页

public override void OnNavigatedTo(object sender, NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(sender,e); 
     if (App.Activated) 
       if (NavigationService.CanGoBack){ 
        NavigationService.GoBack(); 
        return; //remember that GoBack() is async and will not cause this function to end early! you must return 

       } 
       else { App.Activated = false; } 

     } 

    } 
+0

krolth和@willmel感谢您的详细回复。我仍然无法找到解决我的问题。我多说一点。我有一个使用相机和调度计时器对象的单个页面的应用程序。当我从开始菜单启动它时,它完美地工作。当我使用开始键或返回键来终止应用程序时,我重新启动时出现错误。我怀疑这是因为操作系统试图保存定时器和相机对象的状态,但无法成功完成。我只需要确保应用程序每次重新开始,无论它是如何启动的。 :) – Gowtham

+0

我找到了解决这个问题的方法!我刚刚添加了主应用程序页面的缓冲页面。当停用后应用程序恢复时,我使用它创建主页面的新实例。不是很优雅。但它的作品! :)谢谢所有... – Gowtham

1

您应该能够从Application_Activated事件做到这一点。在preMango中,您通常会这样做:

private void Application_Activated(object sender, ActivatedEventArgs e) 
    { 
     var state = PhoneApplicationService.Current.State; 
     if (state.ContainsKey("YourKeyName")) 
     { 
      // Typically rehydrate. Clear app state 
     } 
    } 

在Mango中,您可能还需要使用IsApplicationInstancePreserved属性。该属性指示何时为您保存数据,而您不需要加载该数据。见http://msdn.microsoft.com/en-us/library/microsoft.phone.shell.activatedeventargs.isapplicationinstancepreserved(v=vs.92).aspx

所以,你需要添加像这样:

if (e.IsApplicationInstancePreserved) 
    { 
     // Clear State 
    } 
+0

@Frazell墓碑或被置于休眠阶段对我的应用程序造成严重破坏,我无法弄清楚如何解决它。 :( – Gowtham